Hibernate调用Oracle的存储过程
众所周知,当过多的使用存储过程,触发器等 数据库方言相关的应用时,应用程序的移植性会变差,特别是在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的存储过程的更多相关文章
- java下实现调用oracle的存储过程和函数
在Oracle下创建一个test的账户,然后 1.创建表:STOCK_PRICES --创建表格 CREATE TABLE STOCK_PRICES( RIC VARCHAR() PRIMARY KE ...
- C#调用Oracle的存储过程时,连接字符串需要配置PLSQLRSet=1
C#调用Oracle的存储过程时, 如果有个SYS_REFCURSOR的Output参数存储时, web.config文件中的连接字符串需要配置PLSQLRSet=1, 否则可能会报这个错:参数个数或 ...
- firedac调用ORACLE的存储过程
firedac调用ORACLE的存储过程 EMB官方原文地址:http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_Oracle_with_F ...
- 【学习】java下实现调用oracle的存储过程和函数
在oracle下创建一个test的账户,然后按一下步骤执行: 1.创建表:STOCK_PRICES --创建表格CREATETABLE STOCK_PRICES( RIC VARCHAR(6) PRI ...
- Java代码调用Oracle的存储过程,存储函数和包
Java代码调用存储过程和存储函数要使用CallableStatement接口 查看API文档: 上代码: java代码调用如下的存储过程和函数: 查询某个员工的姓名 月薪 职位 create or ...
- hibernate调用oracle存储过程||函数
pakeage dao.Impl; //调用函数FUN_GET(); public String get(String Id,String Name){ return getSession().cre ...
- java 调用oracle 分页存储过程 返回游标数据集
1.分页类 package org.zh.basic; /** * 页面类 * * @author keven * */ public class PageInfo { // 定义 private S ...
- Java 如何调用 oracle 的存储过程
通过命令行创建存储过程 create or replace procedure emp_sal(eno emp.empno%type,esal out emp.sal%type) as begin s ...
- java调用Oracle分页存储过程
Java程序 package com.test; import java.sql.CallableStatement; import java.sql.Connection; import java. ...
随机推荐
- Nginx启动报错误unlink() “nginx.pid” failed (2: No such file or directory)
在修改了配置文件之后,启动nginx的时候发现,进程已经存在了,但是端口没有监听到. 查看错误日志,有如下错误信息 2015/10/22 21:39:06 [alert] 26434#0: unlin ...
- VMware的使用-永久激活码
1.在软件管理中下载安装VMware 版本为14.0 试用期为30天 2.在网上找的永久破解码 VMware 2018 v14.x 永久许可证激活密钥FF31K-AHZD1-H8ETZ-8WWE ...
- for循环总结
1.冒泡排序的总结:其实这个很简单的理解,就是用数组里面的第0个元素(也就是[]里面的第一个数,按照数组的话是第一个,让他们进行挨个比较),示例: 排序前: 14 62 38 41 53 62 71 ...
- SQLite加密 wxSqlite3
一直在网上搜wxSqlite3的文档,但是总找不到能真正解决问题的,就是一个简单的编译wxSqlite3自带的示例也出了老多问题,后来却发现,其实wxSqlite3的readme中已经有了详细的方法, ...
- LUOGU P2564 [SCOI2009]生日礼物 (队列+模拟)
传送门 解题思路 还是比较好想的,用一个队列,然后把所有点放在一起排个序,依次入队.每次检查队头元素的种类是否为当前入队元素种类,是的话就一直\(pop\),每次更新答案即可. 代码 #include ...
- SpringBoot_05_ssm拦截器和默认欢迎页面的设置
1.在springBoot下通过使用拦截器完成在没有登陆的前提下,不允许访问其他资源 编写拦截器,要实现HandlerInterceptor @Component public class UserI ...
- 转:C语言中volatile关键字的作用 专家博客
源地址:http://blog.csdn.net/tigerjibo/article/details/7427366 一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整 ...
- 动态调整Log4j日志级别
log4j2.xml配置文件中支持配置monitorInterval参数,检测到配置改变后重新加载,达到动态调整日志级别的效果. 故调整日志级别无须手动重启服务. log4j2.xml配置文件示意: ...
- dedecms 调用英文标题和栏目描述
调用英文标题: 参考文献 http://www.dedecms51.com/dedecmsjiaocheng/chengxukaifa/149476.html 增加 dede/templets/cat ...
- java空和非空判断
public static boolean isEmpty(String str){ if("".equals(str)||str==null){ return true; }el ...