`
残缺的完美
  • 浏览: 42323 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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;   


映射文件中关于存储过程内容如下

  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>   


{ ? = 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);   


要求你的存储过程必须能返回记录集,否则要出错
如果你的存储过程是完成非查询任务就应该在配置文件用以下三个标签 

  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>   


有一点不好的地方就是调用存储过程获取记录集时,不能对Query使用
setFirstResult(int)和setMaxResults(int)方法来分页

分享到:
评论

相关推荐

    1、hibernate调用存储过程1

    1、使用hibernate调用不带参数返回值的存储过程方法public Boolean doInHibernate(Session session) t

    自学oracle存储过程

    6. Hibernate 调用 Oracle 存储过程..................................................................................... 6 用 Java 调用 Oracle 存储过程总结..................................................

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     9.6 通过Hibernate调用存储过程  9.7 小结  9.8 思考题 第10章 映射组成关系  10.1 建立精粒度对象模型  10.2 建立粗粒度关系数据模型  10.3 映射组成关系  10.3.1 区分值(Value)类型和实体(Entity)类型...

    Hibernate实战(第2版 中文高清版)

     8.2.2 整合存储过程和函数   8.3 改进Schema DDL   8.3.1 定制SQL名称和数据类型   8.3.2 确保数据一致性   8.3.3 添加领域约束和列约束   8.3.4 表级约束   8.3.5 数据库约束   8.3.6 创建索引  ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    6.3 Log4j的使用方法 6.3.1 配置Log4j 6.3.2 配置根Logger 6.3.3 指定日志输出位置 6.3.4 指定日志输出格式 6.3.5 指定日志输出优先级 6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     9.6 通过Hibernate调用存储过程  9.7 小结  9.8 思考题 第10章 映射组成关系  10.1 建立精粒度对象模型  10.2 建立粗粒度关系数据模型  10.3 映射组成关系  10.3.1 区分值(Value)类型和实体(Entity)类型...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    6.3 Log4j的使用方法 6.3.1 配置Log4j 6.3.2 配置根Logger 6.3.3 指定日志输出位置 6.3.4 指定日志输出格式 6.3.5 指定日志输出优先级 6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant...

    hibernate精华教程

    3)通常将每一个Session实例和一个DB事务邦定,也就是说,每执行一个DB事务,都应该先创建一个新的Session实例,不论事务执行成功与否,最后都应该调用Session的close()方法,从而释放Session实例占用的资源。...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     9.6 通过Hibernate调用存储过程  9.7 小结  9.8 思考题 第10章 映射组成关系  10.1 建立精粒度对象模型  10.2 建立粗粒度关系数据模型  10.3 映射组成关系  10.3.1 区分值(Value)类型和实体(Entity)类型...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     9.6 通过Hibernate调用存储过程  9.7 小结  9.8 思考题 第10章 映射组成关系  10.1 建立精粒度对象模型  10.2 建立粗粒度关系数据模型  10.3 映射组成关系  10.3.1 区分值(Value)类型和实体(Entity)类型...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    6.3 Log4j的使用方法 6.3.1 配置Log4j 6.3.2 配置根Logger 6.3.3 指定日志输出位置 6.3.4 指定日志输出格式 6.3.5 指定日志输出优先级 6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant...

    ssh(structs,spring,hibernate)框架中的上传下载

     文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的...

    基于java,hibernate,mysql,GWT开发,采用分层设计的一个餐馆订餐管理系统

    中间层主要是为了方便ui层调用数据和存储数据设计的类; 数据库交互层主要是为了向中间层提供数据。 数据库交互层分为两小层: 其中一层的类和数据库中每一个表相对应并封装了一些数据库基本操作; 另外一层和...

    低清版 大型门户网站是这样炼成的.pdf

    5.12 hibernate调用存储过程 343 5.13 xml数据持久化 346 5.14 小结 348 第6章 充分利用spring 2.5的ioc利器统管bean世界 349 6.1 java程序员的春天厚礼—spring 2.5 349 6.1.1 爱上spring 2.5的十大理由 350 ...

    iBATIS技术教程PPT和代码.rar

    程序员甚至不需要对 SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的 SQL 并调用 JDBC 接口加以执行。 系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL...

    Spring3.x企业应用开发实战(完整版) part1

    11.6.3 使用StoredProcedure执行存储过程 11.6.4 SqlFunction类 11.7 小结 第12章 整合其他ORM框架 12.1 Spring整合ORM技术 12.2 在Spring中使用Hibernate 12.2.1 配置SessionFactory 12.2.2 使用HibernateTemplate ...

    Spring.3.x企业应用开发实战(完整版).part2

    11.6.3 使用StoredProcedure执行存储过程 11.6.4 SqlFunction类 11.7 小结 第12章 整合其他ORM框架 12.1 Spring整合ORM技术 12.2 在Spring中使用Hibernate 12.2.1 配置SessionFactory 12.2.2 使用HibernateTemplate ...

    ibatis 开发指南

    程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执 行。 大多数情况下(特别是对新项目,新系统的开发而言),这样的机制无往不利,大有...

Global site tag (gtag.js) - Google Analytics