hibernateTemplate调用存储过程

来源:互联网 发布:php和mysql web开发pdf 编辑:程序博客网 时间:2024/05/16 01:20

第一种 
----------------------------------------------------------------------- 

CallableStatement cstmt = hibernateTemplate.getSessionFactory().getCurrentSession().connection().prepareCall("{call collin000.updateDepart}"); 

cstmt.executeUpdate(); 
------------------------------------------------------------------------ 

第二种 
------------------------------------------------------------------------ 
hibernateTemplate.execute( 
 new HibernateCallback() 
 { 
  public Object doInHibernate(Session session) throws SQLException 
  { 
   CallableStatement cs = session.connection().prepareCall("{call collin000.updateDepart}");    

   cs.executeUpdate(); 
   return null; 
     } 
 } 
); 

 

-----------------------------------------------------------------------------------------------

 

Hibernate的复杂用法HibernateCallback 
HibernateTemplate提供一种灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式是通过如下两个方法完成: 
      Object execute(HibernateCallback action) 
      List execute(HibernateCallback action) 
这两个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装Hibernate后灵活性不足的缺陷。HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),该方法只有一个参数Session。 
通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,方法doInHibernate的方法体就是Spring执行的持久化操作。具体代码如下: 

Java代码  收藏代码
  1. public class PersonDaoImpl implements PersonDao  
  2. {  
  3.     //私有实例变量保存SessionFactory  
  4.          private SessionFactory sessionFactory;  
  5.          //依赖注入必须的setter方法  
  6.     public void setSessionFactory(SessionFactory sessionFactory)  
  7.          {  
  8.            this.sessionFactory = sessionFactory;  
  9.     }  
  10.          /** 
  11.           * 通过人名查找所有匹配该名的Person实例 
  12.           * @param name 匹配的人名 
  13.           * @return 匹配该任命的全部Person集合 
  14.           */  
  15.     public List findPersonsByName(final String name)  
  16.          {  
  17.            //创建HibernateTemplate实例  
  18.                    HibernateTemplate hibernateTemplate =  
  19.                          new HibernateTemplate(this.sessionFactory);  
  20.            //返回HibernateTemplate的execute的结果  
  21.                    return (List) hibernateTemplate.execute(  
  22.                 //创建匿名内部类  
  23.                    new HibernateCallback()  
  24.                    {  
  25.               public Object doInHibernate(Session session) throws HibernateException  
  26.                             {  
  27.                    //使用条件查询的方法返回  
  28.                                      List result = session.createCriteria(Person.class)  
  29.                                                                      .add(Restrictions.like(“name”, name+”%”)  
  30.                                                                            .list();  
  31.                                     return result;  
  32.                      }  
  33.                 });  
  34.     }  
  35. }  


注意:方法doInHibernate方法内可以访问Session,该Session对象是绑定到该线程的Session实例。该方法内的持久层操作,与不使用Spring时的持久层操作完全相同。这保证对于复杂的持久层访问,依然可以使用Hibernate的访问方式。

0 0
原创粉丝点击