通用DAO和DaoImpl

  public interface GenericDao<T> {
 void create(T entity);
 void delete(T entity);
 void update(T entity);
 
 T findById(Serializable oid);
 List<T> findAll();
 PageModel<T> findByPager(int pageNo, int pageSize);
}

 

 

 

public class GenericDaoImpl<T> implements GenericDao<T> {
 
 private Class<T> entityClass;
 
 private String entityName;
 
 @SuppressWarnings("unchecked")
 public GenericDaoImpl(){
  //通过反射获取泛型的参数类型信息
  Type type = this.getClass().getGenericSuperclass();
  ParameterizedType pt = (ParameterizedType)type;
  
  Type argType = pt.getActualTypeArguments()[0];
  
  entityClass = (Class<T>)argType;
  
  this.entityName = entityClass.getName();
 }
 

 @Override
 public void create(T entity) {
  HibernateUtil.getSession().save(entity);
 }

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

 @SuppressWarnings("unchecked")
 @Override
 public List<T> findAll() {
//  return HibernateUtil.getSession().createQuery("from " + entityName).list();
  return HibernateUtil.getSession()
       .createCriteria(entityClass)
       .list();
 }

 @SuppressWarnings("unchecked")
 @Override
 public T findById(Serializable oid) {
  return (T)HibernateUtil.getSession().load(entityClass, oid);
 }

 @SuppressWarnings("unchecked")
 @Override
 public PageModel<T> findByPager(int pageNo, int pageSize) {
  PageModel<T> pm = new PageModel<T>();
  
  //Integer temp = (Integer)HibernateUtil.getSession().createCriteria(entityClass).setProjection(Projections.rowCount()).uniqueResult();
  Long temp = (Long)HibernateUtil.getSession()
      .createQuery("select count(o) from " + entityName + " o")
      .uniqueResult();
  
  if(null != temp){
   pm.setRecordCount(temp.intValue());
   pm.setDatas(HibernateUtil.getSession()
     .createCriteria(entityClass)
     .setMaxResults(pageSize)
     .setFirstResult((pageNo - 1) * pageSize)
     .list());
  }
  
  return pm;
 }

 @SuppressWarnings("unchecked")
 @Override
 public void update(T entity) {
  HibernateUtil.getSession().update(entity);
 }
 
}

 

分页实体类PageModel

 

public class PageModel<T> implements Serializable {


private static final long serialVersionUID = -3461444186416298464L;

private long recordCount; //总记录数

private List<T> data; //分页数据列表

private int pageNo = 1; //当前页号

private int pageSize = 10; //每页显示的行数

private int pageCount; //总页数

public long getRecordCount() {

return recordCount;

}

public void setRecordCount(long recordCount) {

this.recordCount = recordCount;

}

public List<T> getData() {

return data;

}

public void setData(List<T> data) {

this.data = data;

}

public int getPageNo() {

if(pageNo < 1){

pageNo = 1;

}

if(pageNo > getPageCount()){

pageNo = pageCount;

}

return pageNo;

}

public void setPageNo(int pageNo) {

this.pageNo = pageNo;

}

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize;

}

public int getPageCount() {

pageCount = (int)((recordCount + pageSize - 1) / pageSize);

return pageCount;

}

public void setPageCount(int pageCount) {

this.pageCount = pageCount;

}

}

 

其他的类或是接口只需要extends

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值