HibernateTemplate会自动帮助我们开启事务,关闭事务,我们自己只专注于业务。我们把这些责任全部委托给了 HibernateTemplate,不用直接控制事务
package cn.edu.hpu.HibernateTemplate;
import org.hibernate.Session;
public class MyHibernateTemplate {
public void executeWithNativeSession(MyHibernateCallback callback){
Session s=null;
try {
s=getSession();
s.beginTransaction();
callback.doInHibernate(s);//这里的方法用户自己就可以在接口里去写(save什么的)
s.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
s.getTransaction().rollback();
}finally{
if(s!=null){
s.close();
s=null;
}
}
}
public Session getSession(){
Session session=null;
return session;
}
}
MyHibernateCallback.java:
package cn.edu.hpu.HibernateTemplate;
import org.hibernate.Session;
public interface MyHibernateCallback {
public void doInHibernate(Session s);
}
//如何去用MyHibernateTemplate方法
public static void main(String[] args) {
new MyHibernateTemplate().executeWithNativeSession(new MyHibernateCallback() {
public void doInHibernate(Session s) {
s.save(null);//或其他事务
}
});
}
以上是HibernateTemplate大致的封装实现原理
使用
我们可以直接继承HibernateDaoSupport的方法getHibernateTemplate()
getHibernateTemplate().
常用方法
delete(Object entity)
删除指定持久化实例
deleteAll(Collection entities)
删除集合内全部持久化类实例
find(String queryString)
根据 HQL查询字符串来返回实例集合
findByNamedQuery(String queryName)
根据命名查询返回实例集合
load或get(Classentity Class,Serializable id)
根据主键加载特定持久化类的实例
save(Object entity)
保存新的实例
saveOrUpdate(Object entity)
根据实例状态,选择保存或者更新
update(Object entity)
更新实例的状态,要求entity 是持久状态
setMaxResults(intmax Results)
设置分页的大小