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

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

  1.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传统的映射方式去调用。 -》存储过程映射和领域模型中的实体的对应关系    复制代码
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 对存储过程的调用 复制代码
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 对存储过程的调用 复制代码
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调用存储过程 复制代码
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 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();
复制代码 1 SQLQuery query = session.createSQLQuery("{Call proc(?)}");
2 query.setString(0, 参数);
3 List list =query.list();

Hibernate调用Oracle的存储过程的更多相关文章

  1. java下实现调用oracle的存储过程和函数

    在Oracle下创建一个test的账户,然后 1.创建表:STOCK_PRICES --创建表格 CREATE TABLE STOCK_PRICES( RIC VARCHAR() PRIMARY KE ...

  2. C#调用Oracle的存储过程时,连接字符串需要配置PLSQLRSet=1

    C#调用Oracle的存储过程时, 如果有个SYS_REFCURSOR的Output参数存储时, web.config文件中的连接字符串需要配置PLSQLRSet=1, 否则可能会报这个错:参数个数或 ...

  3. firedac调用ORACLE的存储过程

    firedac调用ORACLE的存储过程 EMB官方原文地址:http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_Oracle_with_F ...

  4. 【学习】java下实现调用oracle的存储过程和函数

    在oracle下创建一个test的账户,然后按一下步骤执行: 1.创建表:STOCK_PRICES --创建表格CREATETABLE STOCK_PRICES( RIC VARCHAR(6) PRI ...

  5. Java代码调用Oracle的存储过程,存储函数和包

    Java代码调用存储过程和存储函数要使用CallableStatement接口 查看API文档: 上代码: java代码调用如下的存储过程和函数: 查询某个员工的姓名  月薪 职位 create or ...

  6. hibernate调用oracle存储过程||函数

    pakeage dao.Impl; //调用函数FUN_GET(); public String get(String Id,String Name){ return getSession().cre ...

  7. java 调用oracle 分页存储过程 返回游标数据集

    1.分页类 package org.zh.basic; /** * 页面类 * * @author keven * */ public class PageInfo { // 定义 private S ...

  8. Java 如何调用 oracle 的存储过程

    通过命令行创建存储过程 create or replace procedure emp_sal(eno emp.empno%type,esal out emp.sal%type) as begin s ...

  9. java调用Oracle分页存储过程

    Java程序 package com.test; import java.sql.CallableStatement; import java.sql.Connection; import java. ...

随机推荐

  1. Nginx启动报错误unlink() “nginx.pid” failed (2: No such file or directory)

    在修改了配置文件之后,启动nginx的时候发现,进程已经存在了,但是端口没有监听到. 查看错误日志,有如下错误信息 2015/10/22 21:39:06 [alert] 26434#0: unlin ...

  2. VMware的使用-永久激活码

    1.在软件管理中下载安装VMware  版本为14.0   试用期为30天 2.在网上找的永久破解码 VMware 2018 v14.x 永久许可证激活密钥FF31K-AHZD1-H8ETZ-8WWE ...

  3. for循环总结

    1.冒泡排序的总结:其实这个很简单的理解,就是用数组里面的第0个元素(也就是[]里面的第一个数,按照数组的话是第一个,让他们进行挨个比较),示例: 排序前: 14 62 38 41 53 62 71 ...

  4. SQLite加密 wxSqlite3

    一直在网上搜wxSqlite3的文档,但是总找不到能真正解决问题的,就是一个简单的编译wxSqlite3自带的示例也出了老多问题,后来却发现,其实wxSqlite3的readme中已经有了详细的方法, ...

  5. LUOGU P2564 [SCOI2009]生日礼物 (队列+模拟)

    传送门 解题思路 还是比较好想的,用一个队列,然后把所有点放在一起排个序,依次入队.每次检查队头元素的种类是否为当前入队元素种类,是的话就一直\(pop\),每次更新答案即可. 代码 #include ...

  6. SpringBoot_05_ssm拦截器和默认欢迎页面的设置

    1.在springBoot下通过使用拦截器完成在没有登陆的前提下,不允许访问其他资源 编写拦截器,要实现HandlerInterceptor @Component public class UserI ...

  7. 转:C语言中volatile关键字的作用 专家博客

    源地址:http://blog.csdn.net/tigerjibo/article/details/7427366 一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整 ...

  8. 动态调整Log4j日志级别

    log4j2.xml配置文件中支持配置monitorInterval参数,检测到配置改变后重新加载,达到动态调整日志级别的效果. 故调整日志级别无须手动重启服务. log4j2.xml配置文件示意: ...

  9. dedecms 调用英文标题和栏目描述

    调用英文标题: 参考文献 http://www.dedecms51.com/dedecmsjiaocheng/chengxukaifa/149476.html 增加 dede/templets/cat ...

  10. java空和非空判断

    public static boolean isEmpty(String str){ if("".equals(str)||str==null){ return true; }el ...