基于Hibernate的dao层抽取

时间:2020-12-06 11:22:31

 

BaseDao接口

基于Hibernate的dao层抽取基于Hibernate的dao层抽取
package com.hao.dao.base;

import java.io.Serializable;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;

public interface BaseDao<T> {
/**
* 保存实体
*
@param entity
*/
void save(T entity);
/**
* 删除实体
*
@param entity
*/
void delete(T entity);
/**
* 根据实体Id删除实体
*
@param id
*/
void deleteById(Serializable id);
/**
* 更新实体信息
*
@param entity
*/
void update(T entity);
/**
* 根据Id查询实体
*
@param id
*
@return
*/
T findById(Serializable id);
/**
* 查询所有实体信息
*
@return
*/
List
<T> list();
/**
* 查询实体的总数
*
@param dc
*
@return
*/
Integer getTotalCount(DetachedCriteria dc);
/**
* 分页查询实体
*
@param dc 离线查询条件
*
@param start 查询起始下标
*
@param pageSize 每页的记录条数
*
@return
*/
List
<T> getPageList(DetachedCriteria dc, Integer start, Integer pageSize);
}
View Code

 

BaseDaoImpl实现类

基于Hibernate的dao层抽取基于Hibernate的dao层抽取
package com.hao.dao.base.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import com.hao.dao.base.BaseDao;

public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {

private Class<T> entityClass;

@SuppressWarnings(
"unchecked")
public BaseDaoImpl() {
// 获取子类对象的父类类型
ParameterizedType superClass = (ParameterizedType) this.getClass()
.getGenericSuperclass();
// 获得在父类类型上声明的反省数组
Type[] genericTypes = superClass.getActualTypeArguments();
// 第一个泛型即为实体类型
entityClass = (Class<T>) genericTypes[0];
}

@Override
public void save(T entity) {
getHibernateTemplate().save(entity);
}

@Override
public void delete(T entity) {
getHibernateTemplate().delete(entity);
}

@Override
public void deleteById(Serializable id) {
T entity
= getHibernateTemplate().load(entityClass, id);
getHibernateTemplate().delete(entity);
}

@Override
public void update(T entity) {
getHibernateTemplate().update(entity);
}

@Override
public T findById(Serializable id) {
return getHibernateTemplate().get(entityClass, id);
}

@Override
public List<T> list() {
return getHibernateTemplate().loadAll(entityClass);
}

@Override
public Integer getTotalCount(DetachedCriteria dc) {
//设置查询的聚合函数,总记录数
dc.setProjection(Projections.rowCount());
@SuppressWarnings(
"unchecked")
List
<Long> list = (List<Long>) getHibernateTemplate().findByCriteria(dc);
//清空之前设置的聚合函数
dc.setProjection(null);

if(list!=null && list.size()>0){
Long count
= list.get(0);
return count.intValue();
}
else{
return null;
}
}

@Override
public List<T> getPageList(DetachedCriteria dc, Integer start, Integer pageSize) {
@SuppressWarnings(
"unchecked")
List
<T> list = (List<T>) getHibernateTemplate().findByCriteria(dc, start, pageSize);
return list;
}

/**
* HibernateDao接口在使用前必须注入SessionFactory
*
*
@param sessionFactory
*/
@Autowired
public void setSF(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
}
View Code

 

相关文章