package com.czw.hibernate.base.dao.impl;
import com.czw.hibernate.base.dao.Base;
import com.czw.hibernate.base.dao.PageInfo;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.metadata.ClassMetadata;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author caiZhouWen
* <p>T ----> 泛型类</p>
* <p>PK ---> 泛型类的主键的java数据类型</p>
*/
@Repository
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public abstract class BaseImpl<T, PK extends Serializable> implements Base<T, PK> {
private static final String ORDER_DESC = "desc";
private static final String ORDER_ASC = "asc";
private Class<T> clazz = getClazzGenricType();
@Resource
private SessionFactory sessionFactory;
public Session getSession() {
return this.sessionFactory.getCurrentSession();
}
public BaseImpl() {
}
public SessionFactory getSessionFactory() {
return this.sessionFactory;
}
@Override
public void save(T entity) {
getSession().save(entity);
}
@Override
public void delete(T entity) {
getSession().delete(entity);
}
@Override
public void deleteById(PK id) {
T t = (T) getSession().get(clazz, id);
getSession().delete(t);
}
/**
* 根据hql更新或删除
*
* @param hql
* @param hqlParams hql占位符参数,可选
* @return 返回 成功返回 1
*/
@Override
public int updateOrDeleteByHQL(String hql, List<? extends Object> hqlParams) {
int status = this.executeHql(hql, hqlParams);
return status;
}
@Override
public void update(T entity) {
entity = getUpdateEntity(entity);
getSession().update(entity);
}
@Override
public int updateOrDeleteByHQL(String hql) {
int status = this.executeHql(hql, null);
return status;
}
@Override
public void saveOrUpdate(T entity) {
entity = getUpdateEntity(entity);
this.getSession().saveOrUpdate(entity);
}
@Override
public T queryById(PK id) {
if (StringUtils.isEmpty(id)) {
return null;
} else {
return (T) getSession().get(clazz, id);
}
}
@Override
public List<T> queryAll() {
return getSession().createQuery("FROM " + clazz.getSimpleName()).list();
}
/**
* 通过hql查询
*
* @param queryString hql语句
* @param params 参数,可选
*/
@Override
public List<T> queryListByHql(String queryString, List<? extends Object> params) {
Query queryObject = getSession().createQuery(queryString);
if (params != null && params.size() > 0) {
for (int i = 0; i < params.size(); i++) {
queryObject.setParameter(i, params.get(i));
}
}
return queryObject.list();
}
/**
* 根据HQL语句查询实体
*
* @param hql 待查询的HQL语句
* @return
*/
@Override
public List<T> queryByHql(String hql) {
return getSession().createQuery(hql).list();
}
/**
* 单表通过 in 查询 只需要传入字段名,以及 in 集合
*
* @param filedName 字段名
* @param values 集合
* @return
*/
@Override
public List<T> queryByFiledIn(String filedName, List<? extends Object> values) {
String hql = "from " + clazz.getSimpleName() + " WHERE " + filedName + " in (:values)";
Query query = getSession().createQuery(hql);
query.setParameterList("values", values);
List<T> list = query.list();
getSession().flush();
if (list != null && list.size() != 0) {
return list;
} else {
return new ArrayList<>();
}
}
/**
* 通过 criterion 查询
*
* @param criterion
* @param orderColumnName 排序字段,可选
* @param order 按什么进行排序,可选
* @return
*/
@Override
public List<T> queryByCriterion(List<Criterion> criterion, String orderColumnName, String order) {
Criteria criteria = getSession().createCriteria(clazz);
if (orderColumnName != null && BaseImpl.ORDER_DESC.equalsIgnoreCase(order)) {
criteria.addOrder(Order.desc(orderColumnName));
}
if (orderColumnName != null && BaseImpl.ORDER_ASC.equalsIgnoreCase(order)) {
criteria.addOrder(Order.asc(orderColumnName));
}
return criteria.list();
}
/**
* @param criterion List<Criterion> criterion
* @param pageRow 当前第几页
* @param pageSize 每页需要显示的记录数
* @param orderColumnName 排序字段,可选
* @param order 按什么进行排序,可选
* @return
*/
@Override
public PageInfo<T> queryByCriterionPageInfo(List<Criterion> criterion, Integer pageRow, Integer pageSize, String orderColumnName, String order) {
Criteria criteria = getSession().createCriteria(clazz);
for (Criterion criterion1 : criterion) {
criteria.add(criterion1);
}
int count = criteria.list().size();
pageRow = pageRow >= 1 ? (pageRow - 1) : 0;
criteria.setFirstResult(pageRow * pageSize);
criteria.setMaxResults(pageSize);
if (orderColumnName != null && BaseImpl.ORDER_DESC.equalsIgnoreCase(order)) {
criteria.addOrder(Order.desc(orderColumnName));
}
if (orderColumnName != null && BaseImpl.ORDER_ASC.equalsIgnoreCase(order)) {
criteria.addOrder(Order.asc(orderColumnName));
}
List list = criteria.list();
PageInfo<T> pageInfo = new PageInfo(pageRow + 1, pageSize, list);
if (list.size() > 0) {
pageInfo.setTotal(count);
pageInfo.setTotalPage(getCountPage(count, pageSize));
}
return pageInfo;
}
/**
* @param hql 需要查询的hql语句
* @param pageRow 查询第pageRow页的记录
* @param pageSize 每页需要显示的记录数
* @return 当前页的所有记录
*/
@Override
public PageInfo<T> findByPage(String hql, int pageRow, int pageSize) {
Query query = getSession().createQuery(hql);
int count = query.list().size();
pageRow = pageRow >= 1 ? (pageRow - 1) : 0;
List<T> list = query.setFirstResult(pageRow * pageSize).setMaxResults(pageSize).list();
PageInfo<T> pageInfo = new PageInfo(pageRow + 1, pageSize, list);
if (list.size() > 0) {
pageInfo.setTotal(count);
pageInfo.setTotalPage(getCountPage(count, pageSize));
}
return pageInfo;
}
/**
* 使用hql 语句进行分页查询操作
*
* @param hql 需要查询的HQL语句
* @param pageRow 查询第pageRow页的记录
* @param pageSize 每页需要显示的记录数
* @param params 如果hql带占位符参数,params用于传入占位符参数,可选
* @return 当前页的所有记录
*/
@Override
public PageInfo<T> findByPage(String hql, int pageRow, int pageSize, List<? extends Object> params) {
Query query = getSession(
没有合适的资源?快使用搜索试试~ 我知道了~
spring4+hibernate4 封装BaseDao增删改查以及分页,,支持jdk1.7,不支持jdk1.8
共14个文件
java:8个
xml:4个
iml:1个
需积分: 13 17 下载量 163 浏览量
2017-12-04
11:14:20
上传
评论 2
收藏 15KB RAR 举报
温馨提示
spring4+hibernate4 整合,封装BaseDao增删改查以及分页,,支持jdk1.7,不支持jdk1.8,数据源使用c3p0
资源推荐
资源详情
资源评论
收起资源包目录
hibernateBase.rar (14个子文件)
hibernateBase
pom.xml 10KB
hibernateBase.iml 8KB
src
test
resources
java
com
demo
HelloTest.java 3KB
main
webapp
WEB-INF
web.xml 2KB
view
index.jsp 57B
resources
config
spring-mvc.xml 2KB
spring-hibernate.xml 3KB
java
com
czw
hibernate
dao
UserDao.java 501B
base
dao
PageInfo.java 1KB
Base.java 3KB
impl
BaseImpl.java 13KB
controller
HelloController.java 898B
service
UserService.java 635B
entity
User.java 3KB
共 14 条
- 1
资源评论
java客栈的小二
- 粉丝: 8
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功