DAO基类的实现

来源:互联网 发布:php is numeric float 编辑:程序博客网 时间:2024/05/16 15:31
Java代码 复制代码
  1. package com.zjut.DAO;   
  2.   
  3. import java.util.List;   
  4.   
  5. import com.zjut.PO.User;   
  6. public interface UserDAO {   
  7. public List getUsers();   
  8. public User getUserByID(int id);   
  9. public boolean deleteUserByID(int id);   
  10. public boolean updateUser(User user);   
  11. public boolean saveUser(User user);   
  12. //public List userList(int PageSize,int startRow);   
  13. //public int getUserRows(String query);   
  14. }  
然后就用一个类来实现这个接口....这样就完了, 因为User的操作不是很多, 我就在想没有必要来加个基接口了吧 ...
后来:
按照rainlife大哥的设计思想 :
Java代码 复制代码
  1. 这里引用rainlife大哥的帖子   
  2.   
  3.   
  4. 首先定义DAO类的接口IGenericDAO,该接口定义了共同的CRUD操作:   
  5.   
  6. java 代码   
  7.     
  8. /**    
  9.  * 定义通用的CRUD操作    
  10.  * @author rainlife    
  11.  */      
  12. public interface IGenericDAO 〈T, ID extends Serializable〉    
  13. {      
  14. //  通过主键标识查找某个对象。      
  15.     public T findById(ID id);      
  16.           
  17. //  通过主键标识查找某个对象,可以锁定表中对应的记录。      
  18.     T findById(ID id, boolean lock);      
  19.       
  20.     //得到所有的对象。      
  21.     List findAll();      
  22.       
  23.     //通过给定的一个对象,查找与其匹配的对象。      
  24.     List findByExample(T exampleInstance);      
  25.       
  26.     //持久化对象。      
  27.     T makePersistent(T entity);      
  28.       
  29.     //删除对象。      
  30.     void makeTransient(T entity);      
  31. }      
  32.   
  33.   
  34. 下面是使用Hibernate针对该接口的实现GenericDAOHibernate:   
  35.   
  36. java 代码   
  37.     
  38. /**    
  39.  * 这是针对IGenericDAO接口的Hibernate实现,完成通用的CRUD操作。    
  40.  * @author rainlife    
  41.  * @param  POJO类    
  42.  * @param   POJO类的主键标识符    
  43.  * @param  针对每一个POJO类的DAO类实现     
  44.  */      
  45. public abstract class GenericDAOHibernate 〈T,ID extends Serializable, DAOImpl extends IGenericDAO〈T,ID〉〉    
  46.         implements IGenericDAO〈T,ID〉    
  47. {      
  48.     private Class persistentClass;      
  49.       
  50.     protected Session session;      
  51.       
  52.     public GenericDAOHibernate()      
  53.     {      
  54.         this.persistentClass = (Class) ((ParameterizedType) getClass()      
  55.                 .getGenericSuperclass()).getActualTypeArguments()[0];      
  56.     }      
  57.       
  58.     @SuppressWarnings("unchecked")      
  59.     public DAOImpl setSession(Session s)      
  60.     {      
  61.         this.session = s;      
  62.         return (DAOImpl)this;      
  63.     }      
  64.       
  65.     protected Session getSession()      
  66.     {      
  67.         if (session == null)      
  68.             throw new IllegalStateException(      
  69.                     "Session has not been set on DAO before usage");      
  70.         return session;      
  71.     }      
  72.       
  73.     public Class getPersistentClass()      
  74.     {      
  75.         return persistentClass;      
  76.     }      
  77.       
  78.           
  79.     @SuppressWarnings("unchecked")      
  80.     public T findById(ID id)      
  81.     {      
  82.         return (T) getSession().load(getPersistentClass(), id);      
  83.     }      
  84.           
  85.     @SuppressWarnings("unchecked")      
  86.     public T findById(ID id, boolean lock)      
  87.     {      
  88.         T entity;      
  89.         if (lock)      
  90.             entity = (T) getSession().load(getPersistentClass(), id, LockMode.UPGRADE);      
  91.         else      
  92.             entity = findById(id);      
  93.       
  94.         return entity;      
  95.     }      
  96.       
  97.     @SuppressWarnings("unchecked")      
  98.     public List findAll()      
  99.     {      
  100.         return findByCriteria();      
  101.     }      
  102.       
  103.     @SuppressWarnings("unchecked")      
  104.     public List findByExample(T exampleInstance)      
  105.     {      
  106.         Criteria crit = getSession().createCriteria(getPersistentClass());      
  107.         Example example = Example.create(exampleInstance);      
  108.         crit.add(example);      
  109.         return crit.list();      
  110.     }      
  111.           
  112.     @SuppressWarnings("unchecked")      
  113.     public List findByExample(T exampleInstance, String[] excludeProperty)      
  114.     {      
  115.         Criteria crit = getSession().createCriteria(getPersistentClass());      
  116.         Example example = Example.create(exampleInstance);      
  117.         for (String exclude : excludeProperty)      
  118.         {      
  119.             example.excludeProperty(exclude);      
  120.         }      
  121.         crit.add(example);      
  122.         return crit.list();      
  123.     }      
  124.       
  125.     @SuppressWarnings("unchecked")      
  126.     public T makePersistent(T entity)      
  127.     {      
  128.         getSession().saveOrUpdate(entity);      
  129.         //getSession().save(entity);      
  130.         return entity;      
  131.     }      
  132.       
  133.     public void makeTransient(T entity)      
  134.     {      
  135.         getSession().delete(entity);      
  136.     }      
  137.       
  138.     @SuppressWarnings("unchecked")      
  139.     protected List findByCriteria(Criterion... criterion)      
  140.     {      
  141.         Criteria crit = getSession().createCriteria(getPersistentClass());      
  142.         for (Criterion c : criterion)      
  143.         {      
  144.             crit.add(c);      
  145.         }      
  146.         return crit.list();      
  147.     }      
  148.           
  149.     @SuppressWarnings("unchecked")      
  150.     /**    
  151.      * 增加了排序的功能。    
  152.      */      
  153.     protected List findByCriteria(Order order,Criterion... criterion)      
  154.     {      
  155.         Criteria crit = getSession().createCriteria(getPersistentClass());      
  156.         for (Criterion c : criterion)      
  157.         {      
  158.             crit.add(c);      
  159.         }      
  160.         if(order!=null)      
  161.             crit.addOrder(order);      
  162.         return crit.list();      
  163.     }      
  164.           
  165.     @SuppressWarnings("unchecked")      
  166.     protected List findByCriteria(int firstResult,int rowCount,Order order,Criterion... criterion)      
  167.     {      
  168.         Criteria crit = getSession().createCriteria(getPersistentClass());      
  169.         for (Criterion c : criterion)      
  170.         {      
  171.             crit.add(c);      
  172.         }      
  173.         if(order!=null)      
  174.             crit.addOrder(order);      
  175.         crit.setFirstResult(firstResult);      
  176.         crit.setMaxResults(rowCount);      
  177.         return crit.list();      
  178.     }      
  179. }      
  180.   
  181.   
  182. 这样,我们自己所要使用的DAO类,就可以直接从这个Hibernate的DAO类继承:   
  183.   
  184. 比如说我们定义一个IUserDAO接口,该接口继承IGenericDAO:   
  185.   
  186.   
  187. java 代码   
  188. public interface IUserDAO extends IGenericDAO〈User,Integer〉    
  189. {      
  190.     public User find(String username,String password);      
  191.     public User find(String username);      
  192. }      
  193.   
  194.     
  195.   
  196. 该接口从IGenericDAO继承,自然也就定义了IGenericDAO接口所定义的通用CRUD操作。   
  197.   
  198.   
  199. 再来看一下针对IUserDAO 的Hibernate实现UserDAOHibernate:   
  200.   
  201.   
  202. java 代码   
  203. public class UserDAOHibernate extends GenericDAOHibernate〈User,Integer,IUserDAO〉 implements IUserDAO {          
  204.   
  205.       
  206.     public User find(String username, String password) {      
  207.         //此处省略具体代码      
  208.     }      
  209.       
  210.     public User find(String username) {      
  211.         //此处省略具体代码      
  212.     }      
  213. }      
  214.   
  215.     
  216.   
  217. UserDAOHibernate继承GenericDAOHibernate并实现IUserDAO接口,这样,我们的UserDAOHibernate既拥有通用的CRUD操作,也实现了针对用户的特定的业务操作。  

 

转自:http://www.javaeye.com/topic/83855

原创粉丝点击