Spring整合Hibernate:HibernateTemplate的用法

HibernateTemplate的 常规 用法
1
,void delete ( Object entity ) : 删除指定持久化实例
public void removePerson( int personid)
{
  //先加载特定的实例
  Object  p  = getHibernateTemplate().load( Person.class , new Integer( personid));
  //删除特定实例
  getHibernateTemplate().delete (p);
}
2deleteAll ( Collection entities ) : 删除集合内全部持久化类实例

3find ( String queryString ) : 根据HQL查询字符串来返回实例集合
Public List getPersons()
{
//返回Person的全部实例
return getHibernateTemplate().find ( " from Person " );
}

4findByNamedQuery ( String queryName) : 根据命名查询返回实例集合

5get ( Class entityClass , Serializable id ) : 根据主键加载特定持久化类的实例
public Person getPerson()
{  
//返回特定主键对应的Person实例
return (Person)getHibernateTemplate().get (Person.class , new Integer(person id));
}
6save ( Object entity ) : 保存新的实例

7saveOrUpdate ( Object entity ): 根据实例状态,选择保存或者更新

8update ( Object entity ) : 更新实例的状态,要求entity是持久状态

9setMaxResults ( int maxResults ) : 设置分页的大小。

HibernateTemplate的 更灵活 的用法
更灵活的访问是通过以下两个方法完成的:
Object  execute ( HibernateCallback action ) ;
List  execute ( HibernateCallback action );
这两个方法都需要一个HibernateCallback的实例,可以在任何有效的hibernate数据访问中使用。用法灵活,解决了Spring封装Hibernate后灵活性不足的缺陷。
HibernateCallback 是一个接,该接口只有一个方doInHibernate ( org.hibernate.Session session ), 该方法只有一个参数Session.
具体代码如下:
public class PersonDaolmpl implements PersonDao
{
// 私有实例变量保存SessionFactory
private SessionFactory sessionFactory;
// 依赖注入必需的setter 方法
public void setSessionFactory(SessionFactory sessionFactory)
{
this.sessionFactory = sessionFactory;
}
/**
*通过人名查找所有匹配该名的Person 实例
* @param name 匹配的人名
* @return 匹配该任命的全部Person 集合
*/
public List findPersonsByName(final String name)
//创建HibernateTemplate实例
HibernateTemplate hibernateTemplate = new HibernateTemplate(this.sessionFactory);
//返回HibernateTemplate的execute 的结果
return (List) hibernateTemplate.execute (
//创建匿名内部类
new HibernateCallback ()
public Object doInHibernate (Session session)
throws Hibernate Exception
{
//使用条件查询的方法返回
List result = session.createCriteria(Person.class)
.add(Restrictions.like("name", name+ " %") .list ( ) ;
return result;
} ) :
}
}
注意:在方法doInHibernate内可以访问到Session,该session是完全绑定到当前线程的Session实例,保证在对于复杂的持久层访问时,依然可以使用Hibernate的访问方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值