一个通用的DAO接口及其Hibernate3实现 (2)

 
  1. import java.io.*;   
  2. import java.util.*;   
  3.   
  4. /**  
  5.  * 通用DAO,用于对象的持久化、查询(分页)  
  6.  *   
  7.  * @author SunHui  
  8.  *   
  9.  */  
  10. public interface Dao {   
  11.  /**  
  12.   * 保存(持久化)一个对象  
  13.   *   
  14.   * @param object  
  15.   * 要保存的对象  
  16.   */  
  17.  public void save(Object object);   
  18.   
  19.  /**  
  20.   * 更新一个对象  
  21.   *   
  22.   * @param object  
  23.   * 要修改的对象  
  24.   */  
  25.  public void update(Object object);   
  26.   
  27.  /**  
  28.   * 用语句更新记录  
  29.   *   
  30.   * @param queryString  
  31.   * 查询语句  
  32.   * @param parameters  
  33.   * 参数  
  34.   */  
  35.  public void updateByQuery(final String queryString,   
  36.    final Object[] parameters);   
  37.   
  38.  /**  
  39.   * 删除一个对象  
  40.   *   
  41.   * @param object  
  42.   * 要删除的对象  
  43.   */  
  44.  public void delete(Object object);   
  45.   
  46.  /**  
  47.   * 根据类型和对象id删除一个对象  
  48.   *   
  49.   * @param clazz  
  50.   * 类型  
  51.   * @param id  
  52.   * 对象id  
  53.   */  
  54.  public void delete(Class clazz, Serializable id);   
  55.   
  56.  /**  
  57.   * 根据类型删除全部对象  
  58.   *   
  59.   * @param clazz  
  60.   * 类型  
  61.   * @return Integer  
  62.   */  
  63.  public Integer deleteAll(final Class clazz);   
  64.   
  65.  /**  
  66.   * 根据查询和参数删除全部对象  
  67.   *   
  68.   * @param queryString  
  69.   * 查询语句  
  70.   * @param parameters  
  71.   * 参数  
  72.   * @return Integer  
  73.   */  
  74.  public Integer deleteByQuery(final String queryString,   
  75.    final Object[] parameters);   
  76.   
  77.  /**  
  78.   * 获得某个类型的全部对象列表  
  79.   *   
  80.   * @param clazz  
  81.   * 类型  
  82.   * @return 对象集合  
  83.   */  
  84.  public List findAll(Class clazz);   
  85.   
  86.  /**  
  87.   * 根据类型和对象id载入一个对象  
  88.   *   
  89.   * @param clazz  
  90.   * 类型  
  91.   * @param id  
  92.   * 对象id  
  93.   * @return 目标对象  
  94.   */  
  95.  public Object load(Class clazz, Serializable id);   
  96.   
  97.  /**  
  98.   * 根据类型和对象id从数据库取得一个对象  
  99.   *   
  100.   * @param clazz  
  101.   * 类  
  102.   * @param id  
  103.   * 对象id  
  104.   * @return 目标对象  
  105.   */  
  106.  public Object get(Class clazz, Serializable id);   
  107.   
  108.  /**  
  109.   * 根据查询语句和查询参数从数据库取得一个对象  
  110.   *   
  111.   * @param queryString  
  112.   * 查询语句  
  113.   * @param parameters  
  114.   * 参数  
  115.   * @return Object 单个对象  
  116.   */  
  117.  public Object get(final String queryString, final Object[] parameters);   
  118.   
  119.  /**  
  120.   * 命名查询  
  121.   *   
  122.   * @param queryName  
  123.   * 命名查询语句  
  124.   * @return 对象列表  
  125.   */  
  126.  public List findByNamedQuery(final String queryName);   
  127.   
  128.  /**  
  129.   * 依据单个参数做命名查询  
  130.   *   
  131.   * @param query  
  132.   * 命名查询语句  
  133.   * @param parameter  
  134.   * 单个查询参数  
  135.   * @return 对象列表  
  136.   */  
  137.  public List findByNamedQuery(final String queryString,   
  138.    final Object parameter);   
  139.   
  140.  /**  
  141.   * 依据参数数组做命名查询  
  142.   *   
  143.   * @param query  
  144.   * 命名查询语句  
  145.   * @param parameters  
  146.   * 查询参数数组  
  147.   * @return 对象列表  
  148.   */  
  149.  public List findByNamedQuery(final String queryString,   
  150.    final Object[] parameters);   
  151.   
  152.  /**  
  153.   * 查询全部  
  154.   *   
  155.   * @param query  
  156.   * 查询语句  
  157.   * @return 对象列表  
  158.   */  
  159.  public List find(final String queryString);   
  160.   
  161.  /**  
  162.   * 带参数查询全部  
  163.   *   
  164.   * @param queryString  
  165.   * 查询语句  
  166.   * @param parameters  
  167.   * 查询参数  
  168.   * @return 对象列表  
  169.   */  
  170.  public List find(final String queryString, final Object[] parameters);   
  171.   
  172.  /**  
  173.   * 分页查询  
  174.   *   
  175.   * @param queryString  
  176.   * 查询语句  
  177.   * @param parameters  
  178.   * 参数  
  179.   * @param pageInfo  
  180.   * 分页信息  
  181.   * @return List 对象列表  
  182.   */  
  183.  public List findPageByQuery(final String queryString,   
  184.    final Object[] parameters, final PageInfo pageInfo);   
  185.   
  186. }   
  187.   
  188. 以下为Dao的Hibernate3实现   
  189.   
  190. import java.io.*;   
  191. import java.util.*;   
  192.   
  193. import org.hibernate.*;   
  194. import org.springframework.orm.hibernate3.*;   
  195. import org.springframework.orm.hibernate3.support.*;   
  196.   
  197. /**  
  198.  * 通用DAO的Hibernate实现  
  199.  *   
  200.  * @author SunHui  
  201.  *   
  202.  */  
  203. public class DaoImpl extends HibernateDaoSupport implements Dao {   
  204.   
  205.  public void save(Object object) {   
  206.   getHibernateTemplate().save(object);   
  207.  }   
  208.   
  209.  public void update(Object object) {   
  210.   getHibernateTemplate().update(object);   
  211.  }   
  212.   
  213.  public void updateByQuery(final String queryString, final Object[] parameters) {   
  214.   getHibernateTemplate().execute(new HibernateCallback() {   
  215.    public Object doInHibernate(Session session) {   
  216.     Query query = session.createQuery(queryString);   
  217.     if (parameters != null) {   
  218.      for (int i = 0; i < parameters.length; i++) {   
  219.       query.setParameter(i, parameters[i]);   
  220.      }   
  221.     }   
  222.     query.executeUpdate();   
  223.     return null;   
  224.    }   
  225.   });   
  226.  }   
  227.   
  228.  public void delete(Object object) {   
  229.   getHibernateTemplate().delete(object);   
  230.  }   
  231.   
  232.  public void delete(Class clazz, Serializable id) {   
  233.   getHibernateTemplate().delete(load(clazz, id));   
  234.  }   
  235.   
  236.  public Integer deleteAll(final Class clazz) {   
  237.   return (Integer) getHibernateTemplate().execute(   
  238.     new HibernateCallback() {   
  239.      public Object doInHibernate(Session session) {   
  240.       Query query = session.createQuery("delete "  
  241.         + clazz.getName());   
  242.       return new Integer(query.executeUpdate());   
  243.      }   
  244.     });   
  245.  }   
  246.   
  247.  public List findAll(Class clazz) {   
  248.   return getHibernateTemplate().find("from " + clazz.getName());   
  249.  }   
  250.   
  251.  public Object load(Class clazz, Serializable id) {   
  252.   return getHibernateTemplate().load(clazz, id);   
  253.  }   
  254.   
  255.  public Object get(Class clazz, Serializable id) {   
  256.   return getHibernateTemplate().get(clazz, id);   
  257.  }   
  258.   
  259.  public List findByNamedQuery(final String queryName) {   
  260.   return getHibernateTemplate().findByNamedQuery(queryName);   
  261.  }   
  262.   
  263.  public List findByNamedQuery(final String queryName, final Object parameter) {   
  264.   return getHibernateTemplate().findByNamedQuery(queryName, parameter);   
  265.  }   
  266.   
  267.  public List findByNamedQuery(final String queryName, final Object[] parameters) {   
  268.   return getHibernateTemplate().findByNamedQuery(queryName, parameters);   
  269.  }   
  270.   
  271.  public List find(final String queryString) {   
  272.   return getHibernateTemplate().find(queryString);   
  273.  }   
  274.   
  275.  public List find(final String queryString, final Object[] parameters) {   
  276.   return getHibernateTemplate().find(queryString, parameters);   
  277.  }   
  278.   
  279.  public List findPageByQuery(final String queryString, final Object[] parameters,   
  280.    final PageInfo pageInfo) {   
  281.   return (List) getHibernateTemplate().execute(new HibernateCallback() {   
  282.    public Object doInHibernate(Session session)   
  283.      throws HibernateException {   
  284.     Query query = session.createQuery(queryString);   
  285.     if (parameters != null) {   
  286.      for (int i = 0; i < parameters.length; i++) {   
  287.       query.setParameter(i, parameters[i]);   
  288.      }   
  289.     }   
  290.     ScrollableResults sr = query.scroll();   
  291.     sr.last();   
  292.     int totalCount = sr.getRowNumber();   
  293.     int startIndex = (pageInfo.getPageIndex() - 1) * pageInfo.getPageSize();   
  294.     query.setMaxResults(pageInfo.getPageSize());   
  295.     query.setFirstResult(startIndex);   
  296.     int totalRec = totalCount + 1;   
  297.     pageInfo.setTotalRec(totalRec);   
  298.     int totalPage = (totalRec % pageInfo.getPageSize() == 0) ? (totalRec / pageInfo.getPageSize())   
  299.       : (totalRec / pageInfo.getPageSize()) + 1;   
  300.     int[] pageNumbers = new int[totalPage];   
  301.     for (int i = 0; i < totalPage; i++) {   
  302.      pageNumbers[i] = (i + 1);   
  303.     }   
  304.     pageInfo.setPageNumbers(pageNumbers);   
  305.     pageInfo.setTotalPage(totalPage);   
  306.     pageInfo.setPageSize(pageInfo.getPageSize());   
  307.     pageInfo.setPageIndex(pageInfo.getPageIndex());   
  308.     pageInfo.setPrePage(pageInfo.getPageIndex() - 1);   
  309.     pageInfo.setNextPage(pageInfo.getPageIndex() + 1);   
  310.     return query.list();   
  311.    }   
  312.   }, true);   
  313.  }   
  314.   
  315.  public Integer deleteByQuery(final String queryString, final Object[] parameters) {   
  316.   return (Integer) getHibernateTemplate().execute(   
  317.     new HibernateCallback() {   
  318.      public Object doInHibernate(Session session) {   
  319.       Query query = session.createQuery(queryString);   
  320.       if (parameters != null) {   
  321.        for (int i = 0; i < parameters.length; i++) {   
  322.         query.setParameter(i, parameters[i]);   
  323.        }   
  324.       }   
  325.       return new Integer(query.executeUpdate());   
  326.      }   
  327.     });   
  328.  }   
  329.   
  330.  public Object get(final String queryString, final Object[] parameters) {   
  331.   List list = getHibernateTemplate().find(queryString, parameters);   
  332.   if (list != null && !list.isEmpty()) {   
  333.    return list.get(0);   
  334.   }   
  335.   return null;   
  336.  }   
  337. }   
  338.   
  339.   
  340. /**  
  341.  * 通用分页信息类,用于承载分页信息  
  342.  *   
  343.  * @author SunHui  
  344.  *   
  345.  */  
  346. public class PageInfo {   
  347.  /**  
  348.   * 总页数  
  349.   */  
  350.  private int totalPage = 1;   
  351.   
  352.  /**  
  353.   * 前一页  
  354.   */  
  355.  private int prePage = 1;   
  356.   
  357.  /**  
  358.   * 下一页  
  359.   */  
  360.  private int nextPage = 1;   
  361.   
  362.  /**  
  363.   * 总记录数  
  364.   */  
  365.  private int totalRec = 0;   
  366.   
  367.  /**  
  368.   * 默认每页记录数  
  369.   */  
  370.  private final int defaultPageSize = 10;   
  371.   
  372.  /**  
  373.   * 每页记录数  
  374.   */  
  375.  private int pageSize = defaultPageSize;   
  376.   
  377.  /**  
  378.   * 当前页码  
  379.   */  
  380.  private int pageIndex = 1;   
  381.   
  382.  /**  
  383.   * 全部页码,从1开始  
  384.   */  
  385.  private int[] pageNumbers;   
  386.   
  387.  public int getPageIndex() {   
  388.   return pageIndex;   
  389.  }   
  390.   
  391.  public void setPageIndex(int pageIndex) {   
  392.   this.pageIndex = pageIndex > 0 ? pageIndex : 1;   
  393.  }   
  394.   
  395.  public int getNextPage() {   
  396.   return nextPage;   
  397.  }   
  398.   
  399.  public void setNextPage(int nextPage) {   
  400.   this.nextPage = nextPage > this.totalPage ? this.totalPage : nextPage;   
  401.  }   
  402.   
  403.  public int getPageSize() {   
  404.   return pageSize;   
  405.  }   
  406.   
  407.  public void setPageSize(int pageSize) {   
  408.   this.pageSize = pageSize > 0 ? pageSize : 10;   
  409.  }   
  410.   
  411.  public int getPrePage() {   
  412.   return prePage;   
  413.  }   
  414.   
  415.  public void setPrePage(int prePage) {   
  416.   this.prePage = prePage < 1 ? 1 : prePage;   
  417.  }   
  418.   
  419.  public int getTotalPage() {   
  420.   return totalPage;   
  421.  }   
  422.   
  423.  public void setTotalPage(int totalPage) {   
  424.   this.totalPage = totalPage > 0 ? totalPage : 1;   
  425.  }   
  426.   
  427.  public int getTotalRec() {   
  428.   return totalRec;   
  429.  }   
  430.   
  431.  public void setTotalRec(int totalRec) {   
  432.   this.totalRec = totalRec > -1 ? totalRec : 0;   
  433.  }   
  434.   
  435.  public int[] getPageNumbers() {   
  436.   return pageNumbers;   
  437.  }   
  438.   
  439.  public void setPageNumbers(int[] pageNumbers) {   
  440.   this.pageNumbers = pageNumbers;   
  441.  }   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值