Hibernate3调用存储过程用法

直接以一个例子在说明,如DB2中有一个简单存储过程 selectAllUsers

  1. CREATE  procedure selectAllUsers     
  2. DYNAMIC RESULT SETS 1    
  3. BEGIN     
  4.       DECLARE temp_cursor1 CURSOR  WITH RETURN TO CLIENT  FOR     
  5.       SELECT * FROM  test;       
  6.       OPEN temp_cursor1;    
  7. END;   

CREATE procedure selectAllUsers DYNAMIC RESULT SETS 1 BEGIN DECLARE temp_cursor1 CURSOR WITH RETURN TO CLIENT FOR SELECT * FROM test; OPEN temp_cursor1; END;
映射文件中关于存储过程内容如下

  1. <hibernate-mapping package="com.unmi.vo">    
  2.     <class name="Test" table="TEST">    
  3.      ............    
  4.     </class>    
  5.   
  6.     <sql-query callable="true" name="selectAllUsers">    
  7.         <return alias="aa" class="Test">    
  8.             <return-property name="oborqt" column="OBORQT"/>    
  9.             <return-property name="moorqt" column="MOORQT"/>    
  10.             <return-property name="roschn" column="ROSCHN"/>    
  11.             <return-property name="plandate" column="PLANDATE"/>    
  12.         </return>    
  13.         { ? = call selectAllUsers() }    
  14.     </sql-query>    
  15. </hibernate-mapping>   

<hibernate-mapping package="com.unmi.vo"> <class name="Test" table="TEST">      ............ </class> <sql-query callable="true" name="selectAllUsers"> <return alias="aa" class="Test"> <return-property name="oborqt" column="OBORQT"/> <return-property name="moorqt" column="MOORQT"/> <return-property name="roschn" column="ROSCHN"/> <return-property name="plandate" column="PLANDATE"/> </return> { ? = call selectAllUsers() } </sql-query> </hibernate-mapping>
{ ? = call selectAllUsers() } 也可以写成{ call selectAllUsers() },

如果有参数就写成 { ? = call selectAllUsers(?,?,?) }

代码中对query设置相应位置上的值就OK,如
 
query.setInteger(1,100);
query.setString(2,"Unmi");
query.setDate(3,new Date());

Java调用关键代码如下 
      

  1. Session session = HibernateUtil.currentSession();    
  2. Query query = session.getNamedQuery("selectAllUsers");    
  3. List list = query.list();    
  4. System.out.println(list);   

Session session = HibernateUtil.currentSession(); Query query = session.getNamedQuery("selectAllUsers"); List list = query.list(); System.out.println(list);
要求你的存储过程必须能返回记录集,否则要出错
如果你的存储过程是完成非查询任务就应该在配置文件用以下三个标签 

  1. <sql-insert callable="true">{call createPerson (?, ?)}</sql-insert>    
  2. <sql-delete callable="true">{? = call deletePerson (?)}</sql-delete>    
  3. <sql-update callable="true">{? = call updatePerson (?, ?)}</sql-update>   

<sql-insert callable="true">{call createPerson (?, ?)}</sql-insert> <sql-delete callable="true">{? = call deletePerson (?)}</sql-delete> <sql-update callable="true">{? = call updatePerson (?, ?)}</sql-update>
有一点不好的地方就是调用存储过程获取记录集时,不能对Query使用
setFirstResult(int)和setMaxResults(int)方法来分页

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值