• 通用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

  • 相关阅读:
    MIME协议(一) -- RFC822邮件格式
    生活
    面向对象设计的SOLID原则、迪米特法则
    策略模式
    asp.net Json序列化
    简单工厂模式
    CSS响应式布局实例
    CSS响应式网站开发
    mysql 记录根据日期字段倒序输出
    IE下JS保存图片
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218464.html
Copyright © 2020-2023  润新知