《spring2.0技术手册》读书笔记九-spring与hibernate整合DAO的书写,HibernateTemplate解析

在spring与hibernate结合以后,可以使用spring提供的org.springframework.orm.hibernate3.HibernateTemplate,或org.springframework.orm.hibernate3.support.HibernateDaoSupport来实现DAO类。

利用HibernateTemplate

 

[java] view plaincopy
 
  1. import org.hibernate.SessionFactory;  
  2. import org.springframework.orm.hibernate3.HibernateTemplate;  
  3. public class UserDAO implements IUserDAO{  
  4.     private HibernateTemplate hibernateTemplate;  
  5.       
  6.     public void setSessionFactory(SessionFactory sessionFactory){  
  7.         hibernateTemplate=new HibernateTemplate(sessionFactory);  
  8.     }  
  9.     public void insert(User user){  
  10.         hibernateTemplate.save(user);  
  11.     }  
  12.       
  13.     public User find(Integer id){  
  14.         User user=(User)hibernateTemplate.get(User.class, id);  
  15.         return user;  
  16.     }  
  17. }  


继承HibernateDaoSupport

 

 

[java] view plaincopy
 
  1. import org.hibernate.SessionFactory;  
  2. import org.springframework.orm.hibernate3.HibernateTemplate;  
  3. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
  4. public class UserDAO extends HibernateDaoSupport implements IUserDAO{  
  5.       
  6.     public void insert(User user){  
  7.         getHibernateTemplate().save(user);  
  8.     }  
  9.       
  10.     public User find(Integer id){  
  11.         User user=(User)getHibernateTemplate().get(User.class, id);  
  12.         return user;  
  13.     }  
  14. }  

继承HibernateDaoSupport的好处是可以省去一些管理SessionFactory、HibernateTemplate资源的工作,只要注入SessionFactory实例即可。Spring会采用“每次事务打开一个Session”的策略,自动提高DB访问性能。

 

补:纵观全局,HibernateTemplate对于DAO的简便实现至关重要,介绍方法如下

构造方法:HibernateTemplate()、HibernateTemplate(SessionFactory)、HibernateTemplate(SessionFactory,boolean allCreate)。

操作方法:void delete(Object entity):删除指定持久化类实例;void deleteAll(Collection entities):删除集合内部的全部持久化类实例;

List find(String queryString)、List find(String queryString, Object value)、List find(final String queryString, final Object... values):查询。value为参数值,根据sql语句中的参数位置(0,1,2...)确定;

List findByNamedParam(String queryString, String paramName, Object value)、List findByNamedParam(final String queryString, final String[] paramNames, final Object[] values):根据参数名设置参数,进行查询;

Object get(String entityName, Serializable id):根据主键加载特定持久化类的实例;

Serializable save(final Object entity):保存新的实例。void update(Object entity):更新实例,要求entity是持久化状态。void saveOrUpdate(final Object entity) :根据实例状态,选择保存或更新;

void setMaxResults(int maxResults):设置最大行数,用于分页的大小。

posted @ 2014-03-12 11:12  ajiaju  阅读(150)  评论(0编辑  收藏  举报