`
Dream.V
  • 浏览: 30353 次
社区版块
存档分类
最新评论

Hibernate调用Oracle的存储过程

阅读更多

  众所周知,当过多的使用存储过程,触发器等 数据库方言相关的应用时,应用程序的移植性会变差,特别是在Hibernate中使用这些,简直是讽刺,但是当今中国又有哪家公司做项目会关心应用程序的移植性呢?

  现在看看Hibernate中对Oracle存储过程的调用.

  1.plsql 代码

  

proc.plsql
create Procedure proc()
begin
      select * from proctab;
end;

1 create procedure  proc1(v_no number(4))
2 begin
3     select * from proc1
4    where id=v_no;
5 end;

   2.Hibernate 存储过程调用的一种方法是,通过XML传统的映射方式去调用。

-》存储过程映射和领域模型中的实体的对应关系

  

xml映射文件
复制代码
 1 <class name="com.test.User" table="proctab">     
 2         <id name="id" column="id">     
 3             <generator class="native"/>     
 4         </id>     
 5         <property name="name" column="name" type="string" />     
 6         <property name="age" column="age" type="integer" />     
 7 </class>     
 8    <sql-query name="getUser" callable="true">     
 9      <return alias="user" class="com.test.User">     
10      <return-property name="id" column="id" />     
11      <return-property name="name" column="name" />     
12      <return-property name="age" column="age" />     
13      </return>     
14      {call proc()}     
15    </sql-query>    
复制代码

-》Hibernate API 对存储过程的调用

Hibernate API code
复制代码
1 Session ss= HibernateSessionFactory.getSession()     
2 List li=ss.getNamedQuery("getUser").list();     
3 ss.close();    
4  
5         Session ss= HibernateSessionFactory.getSession()  
6         List li=ss.getNamedQuery("getUser").list();  
7         ss.close(); 
复制代码

-》JDBC API 对存储过程的调用

jdbc 调用
复制代码
 1 Session session =HibernateSessionFactory.getSession();      
 2 Connection conn = session.connection();      
 3 ResultSet rs =null;     
 4 CallableStatement call = conn.prepareCall("{Call proc()}");     
 5 rs = call.executeQuery();     
 6 rs.close();     
 7 session.close();    
 8  
 9 Session session =HibernateSessionFactory.getSession();   
10 Connection conn = session.connection();   
11 ResultSet rs =null;  
12 CallableStatement call = conn.prepareCall("{Call proc()}");  
13 rs = call.executeQuery();  
14 rs.close();  
15 session.close(); 
复制代码

  -》直接使用 Hibernate createQuerySql调用存储过程

createSqlQuery
复制代码
1 Session session =HibernateSessionFactory.getSession();      
2 SQLQuery query = session.createSQLQuery("{Call proc()}");     
3 List list =query.list();     
4 session.close();    
5  
6 Session session =HibernateSessionFactory.getSession();   
7 SQLQuery query = session.createSQLQuery("{Call proc()}");  
8 List list =query.list();  
9 session.close(); 
复制代码

-》通过Hibernate API或者JDBC,API给存储过程传参

传参1
复制代码
1 CallableStatement call = conn.prepareCall("{Call proc(?)}");     
2 call.setString(1, 参数);     
3 rs = call.executeQuery();    
4  
5 CallableStatement call = conn.prepareCall("{Call proc(?)}");  
6 call.setString(1, 参数);  
7 rs = call.executeQuery(); 
复制代码
传参2
1 SQLQuery query = session.createSQLQuery("{Call proc(?)}");     
2 query.setString(0, 参数);     
3 List list =query.list();   
分享到:
评论

相关推荐

    hibernate query调用oracle存储过程

    使用hibernate的query调用oracle的存储过程/function,包含例子,源码以及数据库文件

    使用hibernate调用oracle的存储过程

    在hibernate中调用oracle中的存储过程的详细代码。可以借鉴使用,帮助学习。

    自学oracle存储过程

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

    Hibernate存储过程的调用

    也可以通过存储过程来执行批量更新。存储过程直接在数据库中运行,速度更加快。在Oracle数据库中可以定义一个名为batchUpdateStudent()的存储过程。

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

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

    二十一道面试程序.txt

    8. 写出Oracle增删改查的存储过程,并在java中调用。 9. 用ajax技术实现一个级联菜单功能。 10.写出插入法进行排序代码。 11.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是...

    Java面试宝典2020修订版V1.0.1.doc

    19、用JDBC如何调用存储过程 69 20、JDBC中的PreparedStatement相比Statement的好处 71 21、写一个用jdbc连接实例。 71 22、ArrayList和Vector的区别? 73 23、List、Set和Map的区别? 74 24、Collection 和 ...

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    Java面试题31.jdbc调用存储过程 Java面试题32.简单说一下你对jdbc的理解 Java面试题33.写一个jdbc的访问oracle的列子 Java面试题34.jdbc中preparedStatement比Statement的好处 Java面试题35.数据库连接池的作用 Java...

    flex_src.rar_flex

    使用MyEclipse 8.0和Oracle为主要开发工具。前台部分基于Flex技术,应用ActionScript来编写前台代码,主要接受用户的请求并委派...在数据管理方面,采用Hibernate框架,使用Oracle数据库实现对数据的有效存储和查询。

    火炬博客系统7

    Hibernate用来作持久层部分和域模型层部分,负责存储、更新、删除、查询数据库记录等,用来作DAO处理,本系统使用Spring整合Hibernate,spring为Hibernate的session提供了有效的容易和安全的控制,Spring控制...

    火炬博客系统6

    Hibernate用来作持久层部分和域模型层部分,负责存储、更新、删除、查询数据库记录等,用来作DAO处理,本系统使用Spring整合Hibernate,spring为Hibernate的session提供了有效的容易和安全的控制,Spring控制...

    java开源包1

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java面试题

    39. 解释$ORACLE_HOME 和$ORACLE_BASE的区别? 19 40. session与cookie的区别和联系? 19 41. Statement和PrepareStatement的区别 19 42. JSP的内置对象及方法。 19 43. JSP的常用指令 20 44. 四种会话跟踪技术 20 45...

    千方百计笔试题大全

    234、存储过程和函数的区别 55 235、事务是什么? 55 236、游标的作用?如何知道游标已经到了最后? 55 237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器...

    java面试宝典

    234、存储过程和函数的区别 55 235、事务是什么? 55 236、游标的作用?如何知道游标已经到了最后? 55 237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器...

    Java面试宝典2010版

    22、用JDBC如何调用存储过程 23、JDBC中的PreparedStatement相比Statement的好处 24. 写一个用jdbc连接并访问oracle数据的程序代码 25、Class.forName的作用?为什么要用? 26、大数据量下的分页解决方法。 27、用...

    最新Java面试宝典pdf版

    22、用JDBC如何调用存储过程 109 23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决...

    传奇八方蔗糖

    NHilo是Hilo算法(来自Hibernate)的实现。 它旨在成为一种生成数据库密钥的工具,而不必依赖于SQL Server的身份列或Oracle的序列之类的DBMS功能。 该存储库不应该负责生成任何信息,它只能是一个存储。 必须在应用...

    Java面试笔试资料大全

    22、用JDBC如何调用存储过程 109 23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决...

Global site tag (gtag.js) - Google Analytics