频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Generic Data Access Objects 设计模式

来源:JavaEye 作者: 出处:巧巧读书 2007-12-15 进入讨论组
下一页 1 2 

Generic Data Access Objects

    普通数据访问对象,这个是Hibernate官方网站上面的一个DAO类的设计模式,基于JDK5.0范型支持,文章地址如下:

http://www.hibernate.org/328.html

我下面的代码与Hibernate官网上提供的有点不同。

首先定义DAO类的接口IGenericDAO,该接口定义了共同的CRUD操作:

java 代码
 
  1. /** 
  2.  * 定义通用的CRUD操作 
  3.  * @author rainlife 
  4.  */  
  5. public interface IGenericDAO 〈T, ID extends Serializable〉
  6. {  
  7. //  通过主键标识查找某个对象。  
  8.     public T findById(ID id);  
  9.       
  10. //  通过主键标识查找某个对象,可以锁定表中对应的记录。  
  11.     T findById(ID id, boolean lock);  
  12.   
  13.     //得到所有的对象。  
  14.     List findAll();  
  15.   
  16.     //通过给定的一个对象,查找与其匹配的对象。  
  17.     List findByExample(T exampleInstance);  
  18.   
  19.     //持久化对象。  
  20.     T makePersistent(T entity);  
  21.   
  22.     //删除对象。  
  23.     void makeTransient(T entity);  
  24. }  

下面是使用Hibernate针对该接口的实现GenericDAOHibernate:

java 代码
 
  1. /** 
  2.  * 这是针对IGenericDAO接口的Hibernate实现,完成通用的CRUD操作。 
  3.  * @author rainlife 
  4.  * @param  POJO类 
  5.  * @param   POJO类的主键标识符 
  6.  * @param  针对每一个POJO类的DAO类实现  
  7.  */  
  8. public abstract class GenericDAOHibernate 〈T,ID extends Serializable, DAOImpl extends IGenericDAO〈T,ID〉〉
  9.         implements IGenericDAO〈T,ID〉
  10. {  
  11.     private Class persistentClass;  
  12.   
  13.     protected Session session;  
  14.   
  15.     public GenericDAOHibernate()  
  16.     {  
  17.         this.persistentClass = (Class) ((ParameterizedType) getClass()  
  18.                 .getGenericSuperclass()).getActualTypeArguments()[0];  
  19.     }  
  20.   
  21.     @SuppressWarnings("unchecked")  
  22.     public DAOImpl setSession(Session s)  
  23.     {  
  24.         this.session = s;  
  25.         return (DAOImpl)this;  
  26.     }  
  27.   
  28.     protected Session getSession()  
  29.     {  
  30.         if (session == null)  
  31.             throw new IllegalStateException(  
  32.                     "Session has not been set on DAO before usage");  
  33.         return session;  
  34.     }  
  35.   
  36.     public Class getPersistentClass()  
  37.     {  
  38.         return persistentClass;  
  39.     }  
  40.   
  41.       
  42.     @SuppressWarnings("unchecked")  
  43.     public T findById(ID id)  
  44.     {  
  45.         return (T) getSession().load(getPersistentClass(), id);  
  46.     }  
  47.       
  48.     @SuppressWarnings("unchecked")  
  49.     public T findById(ID id, boolean lock)  
  50.     {  
  51.         T entity;  
  52.         if (lock)  
  53.             entity = (T) getSession().load(getPersistentClass(), id, LockMode.UPGRADE);  
  54.         else  
  55.             entity = findById(id);  
  56.   
  57.         return entity;  
  58.     }  
  59.   
  60.     @SuppressWarnings("unchecked")  
  61.     public List findAll()  
  62.     {  
  63.         return findByCriteria();  
  64.     }  
  65.   
  66.     @SuppressWarnings("unchecked")  
  67.     public List findByExample(T exampleInstance)  
  68.     {  
  69.         Criteria crit = getSession().createCriteria(getPersistentClass());  
  70.         Example example = Example.create(exampleInstance);  
  71.         crit.add(example);  
  72.         return crit.list();  
  73.     }  
  74.       
  75.     @SuppressWarnings("unchecked")  
  76.     public List findByExample(T exampleInstance, String[] excludeProperty)  
  77.     {  
  78.         Criteria crit = getSession().createCriteria(getPersistentClass());  
  79.         Example example = Example.create(exampleInstance);  
  80.         for (String exclude : excludeProperty)  
  81.         {  
  82.             example.excludeProperty(exclude);  
  83.         }  
  84.         crit.add(example);  
  85.         return crit.list();  
  86.     }  
  87.   
  88.     @SuppressWarnings("unchecked")  
  89.     public T makePersistent(T entity)  
  90.     {  
  91.         getSession().saveOrUpdate(entity);  
  92.         //getSession().save(entity);  
  93.         return entity;  
  94.     }  
  95.   
  96.     public void makeTransient(T entity)  
  97.     {  
  98.         getSession().delete(entity);  
  99.     }  
  100.   
  101.     @SuppressWarnings("unchecked")  
  102.     protected List findByCriteria(Criterion... criterion)  
  103.     {  
  104.         Criteria crit = getSession().createCriteria(getPersistentClass());  
  105.         for (Criterion c : criterion)  
  106.         {  
  107.             crit.add(c);  
  108.         }  
  109.         return crit.list();  
  110.     }  
  111.       
  112.     @SuppressWarnings("unchecked")  
  113.     /** 
  114.      * 增加了排序的功能。 
  115.      */  
  116.     protected List findByCriteria(Order order,Criterion... criterion)  
  117.     {  
  118.         Criteria crit = getSession().createCriteria(getPersistentClass());  
  119.         for (Criterion c : criterion)  
  120.         {  
  121.             crit.add(c);  
  122.         }  
  123.         if(order!=null)  
  124.             crit.addOrder(order);  
  125.         return crit.list();  
  126.     }  
  127.       
  128.     @SuppressWarnings("unchecked")  
  129.     protected List findByCriteria(int firstResult,int rowCount,Order order,Criterion... criterion)  
  130.     {  
  131.         Criteria crit = getSession().createCriteria(getPersistentClass());  
  132.         for (Criterion c : criterion)  
  133.         {  
  134.             crit.add(c);  
  135.         }  
  136.         if(order!=null)  
  137.             crit.addOrder(order);  
  138.         crit.setFirstResult(firstResult);  
  139.         crit.setMaxResults(rowCount);  
  140.         return crit.list();  
  141.     }  
  142. }  
来自:http://www.qqread.com/java/2007/04/t310039.html 更多文章 更多内容请看AccessAccess开发专题,或进入讨论组讨论。
下一页 1 2 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章