众所周知,当过多的使用存储过程,触发器等 数据库方言相关的应用时,应用程序的移植性会变差,特别是在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. Django项目基础配置和基本使用

    博文配置内容包括: django项目的创建 django项目下应用的创建及配置 数据库的配置 templates模板的配置 命令行创建项目: 在需要的目录下创建Django项目输入命令:django- ...

  2. SpringCloudBus

    不重启微服务的情况下更新配置 配置服务端 tensquare_config配置依赖 <dependency> <groupId>org.springframework.clou ...

  3. VS2010-MFC(常用控件:列表框控件ListBox)

    转自:http://www.jizhuomi.com/software/186.html 列表框控件简介 列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选中的项会高亮显示.列表框可分为单 ...

  4. JAXB注解使用

    一.Jaxb处理java对象和xml之间转换常用的annotation有: @XmlType @XmlElement @XmlRootElement @XmlAttribute @XmlAccesso ...

  5. java_缓冲流(字符输出输入流)

    /** java.io.BufferedReader extends Reader * * 构造方法: * BufferedReader(Reader in):创建一个使用默认大小输入缓冲区的缓冲字符 ...

  6. Oracle批量更改用户下表空间

    --查询某个用户下的表,并生成一个修改其命名空间的批处理语句 select 'alter table '|| table_name ||' move tablespace 要迁入的表空间;' from ...

  7. (转)打开Mac OSX原生的NTFS功能

    xingchongsmbp3:~ xingchong$ xingchongsmbp3:~ xingchong$ xingchongsmbp3:~ xingchong$ sudo ln -s /Volu ...

  8. 【学术篇】树上差分--洛谷3128最大流Max Flow

    懒得贴题目,直接放不稳定的传送门(雾):点击前往暴风城(雾) 据说这题是BZOJ3490,但本蒟蒻没有权限╮(╯_╰)╭ 这题似乎就是裸树上差分... 对于树上(x,y)之间的路径上的点区间c[i]加 ...

  9. 扩展kmp板子

    using namespace std; #include <cstdio> #include <cstring> #include <algorithm> #de ...

  10. 【JZOJ3237】间谍派遣

    description 你是M,一个雇佣N个标号为从1到N的间谍的情报机关的总管.每个间谍被派往不同的国家并在那获取重要情报. 如下是你的任务: 1.在部分间谍间组织会面.每次会面在两个间谍间进行,两 ...