配置xml
其他配置参考上篇博客
<?xml version="1.0" encoding="UTF-8"?>
...
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
使用Template(daoimpl层中使用)
使用很简单:获取注入容器的对象hibernateTemplate,调用save的方法。
@Component("u")
public class UserDAOImpl implements UserDAO{
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
@Resource
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
@Override
public void save(User user) {
hibernateTemplate.save(user);
System.out.println("user add to mysql...");
}
}
Template原理
Template Method:一种设置模式,模块方法。比如人出生到死亡。出生到死亡看做一个模块,每个人都必须经历,但是每个人的一生经历可以不一样,我们自己可以在其中添加自己的方法。
CallBack:回调/钩子函数,比如下面的callback.doInHibernate(s)方法,在钩子上面挂什么方法。就执行什么方法。加入我们想在其中实现save方法,只需要在其中用内部类的方式写上即可。
简单模拟代码
MyhibernateCallback接口中有一个doInHibernate(Seesion s);
public void MyhibernateTempalte(){
public void executeWithNativeSeesion(MyhibernateCallback callback){
Seesion s = null;
try{
s = getSeesion();
s.bieganTransaction();
callback.doInHibernate(s);
s.getTransaction().commit();
}catch(Exception e){
s.getTransaction().rollback();
}finally{
//...
}
}
public void getSeesion(){
//...
}
public void save( fianl Seesion o){
new MyhibernateTemplate.executeWithNativeSeesion(new MyhibenateCallBack(){
public void doInhibernate(Seesion s){
s.save();
}
})
}
}