hibernate:使用hibernate 的template接口
HibernateTemplate的 常规 用法
1,voiddelete(Objectentity):删除指定持久化实例
publicvoidremovePerson(intpersonid)
{
//先加载特定的实例
Objectp=getHibernateTemplate().load(Person.class,newInteger(personid));
//删除特定实例
getHibernateTemplate().delete(p);
}
2,deleteAll(Collectionentities):删除集合内全部持久化类实例
3,find(StringqueryString):根据HQL查询字符串来返回实例集合
PublicListgetPersons()
{
//返回Person的全部实例
returngetHibernateTemplate().find("fromPerson");
}
4,findByNamedQuery(StringqueryName):根据命名查询返回实例集合
5,get(ClassentityClass,Serializableid):根据主键加载特定持久化类的实例
publicPersongetPerson()
{
//返回特定主键对应的Person实例
return(Person)getHibernateTemplate().get(Person.class,newInteger(personid));
}
6,save(Objectentity):保存新的实例
7,saveOrUpdate(Objectentity):根据实例状态,选择保存或者更新
8,update(Objectentity):更新实例的状态,要求entity是持久状态
9,setMaxResults(intmaxResults):设置分页的大小。
HibernateTemplate的更灵活的用法:
更灵活的访问是通过以下两个方法完成的:
Objectexecute(HibernateCallbackaction);
Listexecute(HibernateCallbackaction);
这两个方法都需要一个HibernateCallback的实例,可以在任何有效的hibernate数据访问中使用。用法灵活,解决了Spring封装Hibernate后灵活性不足的缺陷。HibernateCallback是一个接,该接口只有一个方doInHibernate(org.hibernate.Sessionsession),该方法只有一个参数Session.
具体代码如下:
publicclassPersonDaolmplimplementsPersonDao
{
//私有实例变量保存SessionFactory
privateSessionFactorysessionFactory;
//依赖注入必需的setter方法
publicvoidsetSessionFactory(SessionFactorysessionFactory)
{
this.sessionFactory=sessionFactory;
}
/**
*通过人名查找所有匹配该名的Person实例
*@paramname匹配的人名
*@return匹配该任命的全部Person集合
*/
publicListfindPersonsByName(finalStringname)
//创建HibernateTemplate实例
HibernateTemplatehibernateTemplate=newHibernateTemplate(this.sessionFactory);
//返回HibernateTemplate的execute的结果
return(List)hibernateTemplate.execute(
//创建匿名内部类
newHibernateCallback()
publicObjectdoInHibernate(Sessionsession)
throwsHibernateException
{
//使用条件查询的方法返回
Listresult=session.createCriteria(Person.class)
.add(Restrictions.like("name",name+"%").list();
returnresult;
}):
}
}
注意:在方法doInHibernate内可以访问到Session,该session是完