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是完

相关推荐