今天学习了一下Spring的HibernateTemplate这个这个知识点,现在跟大家分享一下。
HibernateTemplate这个类在org.springframework.orm.hibernate3中。HIbernateTemplate其实就是把Hibernate中的相同的代码提取出来了。比如我们使用Hibernate的时候通常都是一、获取SessionFactory;二、获取session;三、开始事物;四、CRUD操作;五、提交事物;六、关闭session。其中开始事务,关闭事务,获取session部分都是一样的。因此Spring对Hibernate做了简化封装。把相同部分的代码提取出来做一个模板。即HibernateTemplate。每次只需要加CRUD部分的代码。
用法:
一、通过注入。在beans.xml中加配置
(1)、
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>com.sram.model.User</value>
<value>com.sram.model.Log</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
(2)、在DaoImpl中通过@Resource注入hibernateTemplate,然后直接通过hibernateTemplate调用方法。
@Component("logDao")
public class LogDaoImpl implements LogDao {
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
@Resource
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public void save(Log log) {
// TODO Auto-generated method stub
hibernateTemplate.save(log);
}
}
二、不通过注入的HibernateTemplate的使用
public class ProductDaoImpl implements ProductDao { private HibernateTemplate hibernateTemplate; public void setSessionFactory(SessionFactory sessionFactory) { this.hibernateTemplate = new HibernateTemplate(sessionFactory); } public Collection loadProductsByCategory(String category) throws DataAccessException { return this.hibernateTemplate.find("from test.Product product where product.category=?", category); } }