private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
} /**
* 通过SQL执行无返回结果的存储过程(仅限于存储过程)
*
* @param queryString
* @param params
*/
public void executeVoidProcedureSql(final String queryString, final Object[] params) throws Exception {
Session session = sessionFactory.getCurrentSession();
session.doWork(new Work() {
public void execute(Connection conn) throws SQLException {
ResultSet rs = null;
CallableStatement call = conn.prepareCall("{" + queryString + "}");
if (null != params) {
for (int i = 0; i < params.length; i++) {
call.setObject(i + 1, params[i]);
}
}
rs = call.executeQuery();
call.close();
rs.close();
}
});
} /**
* 通过存储过程查询(单结果集)
*
* @param sql
* 查询sql
* @param params
* 参数
* @param columnNum
* 返回的列数
* @return
*/
public List<Map<String, Object>> find_procedure(final String sql, final Object[] params) throws Exception {
final List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
try {
Session session = sessionFactory.getCurrentSession();
session.doWork(new Work() {
public void execute(Connection conn) throws SQLException {
CallableStatement cs = null;
ResultSet rs = null;
cs = conn.prepareCall(sql);
for (int i = 1; i <= params.length; i++) {
cs.setObject(i, params[i - 1]);// 设置参数
}
rs = cs.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
int colCount = metaData.getColumnCount();
while (rs.next()) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 1; i <= colCount; i++) {
String colName = metaData.getColumnName(i);
map.put(colName, rs.getObject(colName));
}
result.add(map);
}
close(cs, rs);
}
});
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 通过存储过程查询(多结果集)
*
* @param sql
* 查询sql
* @param params
* 参数
* @param columnNum
* 返回的列数
* @return
*/
public List<List<Map<String, Object>>> find_procedure_multi(final String sql, final Object[] params) throws Exception {
final List<List<Map<String, Object>>> result = new ArrayList<List<Map<String, Object>>>();
try {
// conn =
// SessionFactoryUtils.getDataSource(sessionFactory).getConnection();
Session session = sessionFactory.getCurrentSession();
session.doWork(new Work() {
public void execute(Connection conn) throws SQLException {
CallableStatement cs = null;
ResultSet rs = null;
cs = conn.prepareCall(sql);
for (int i = 1; i <= params.length; i++) {
cs.setObject(i, params[i - 1]);
}
boolean hadResults = cs.execute();
ResultSetMetaData metaData = null;
while (hadResults) {// 遍历结果集
List<Map<String, Object>> rsList = new ArrayList<Map<String, Object>>();// 用于装该结果集的内容
rs = cs.getResultSet();// 获取当前结果集
metaData = rs.getMetaData();
int colCount = metaData.getColumnCount();// 获取当前结果集的列数
while (rs.next()) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 1; i <= colCount; i++) {
String colName = metaData.getColumnName(i);
map.put(colName, rs.getObject(colName));
}
rsList.add(map);
}
result.add(rsList);
close(null, rs);// 遍历完一个结果集,将其关闭
hadResults = cs.getMoreResults();// 移到下一个结果集
}
close(cs, rs);
}
});
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} private void close(CallableStatement cs, ResultSet rs) {
try {
if (cs != null) {
cs.close();
}
if (rs != null) {
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}

hibernate 执行存储过程 方法的更多相关文章

  1. [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. 【hibernate 执行方法未插入数据库】hibernate的save方法成功执行,但是未插入到数据库

    今天做项目,碰上这个问题: hibernate的save方法成功执行,但是未插入到数据库. Dao层代码: @Override public void save(T t) { this.getSess ...

  3. Hibernate如何执行存储过程?

    Hibernate如何执行存储过程? @Overridepublic Boolean setVarValue(final String processInstanceId, final String ...

  4. EF增删查改加执行存储过程和sql语句,多种方法汇总

    ActionUrl c = new ActionUrl() { ActionName="test", RequestUrl="/123/123", SubTim ...

  5. Oracle定时任务执行存储过程备份日志记录表

    写在前面 需求 1.备份系统日志表T_S_LOG, 按照操作时间字段OPERATETIME, 将每天的日志增量备份到另一张表. 思路 1.创建一张数据结构完全相同的表T_S_LOG_BAK作为备份表 ...

  6. Dapper完美兼容Oracle,执行存储过程,并返回结果集。

    Dapper完美兼容Oracle,执行存储过程,并返回结果集. 这个问题,困扰了我整整两天. 刚刚用到Dapper的时候,感觉非常牛掰.特别是配合.net 4.0新特性dynamic,让我生成泛型集合 ...

  7. JAVA使用JDBC技术操作SqlServer数据库执行存储过程

    Java使用JDBC技术操作SqlServer数据库执行存储过程: 1.新建SQLSERVER数据库:java_conn_test 2.新建表:tb_User 3.分别新建三个存储过程: 1>带 ...

  8. 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好

    HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...

  9. Oracle中执行存储过程call和exec区别

    Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...

随机推荐

  1. Mac OS X Yosemite & Arduino安装CH340 USB转串口驱动

    新买的Arduino开发板 USB转串口使用了CH340芯片,在Mac OS X Yosemite上正常安装驱动后,在Arduino IDE的端口没发现相应的设备,使用以下方法后就能使用USB转串口调 ...

  2. git command cheat sheet

    clone:克隆 --non-bare:(默认值)一般的克隆方式 --bare:只克隆.git目录 --mirror:只克隆.git目录,并且还保持与origin的关联,可以fetch commit: ...

  3. C语言编程学习:使用函数必须知道的3点注意事项

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  4. Notes on view-dependent Catmull-Clark subdivision surfaces

    - Since we perform elimination after every step of subdivision, the only hanging nodes that we encou ...

  5. IO模型《七》selectors模块

    一 了解select,poll,epoll IO复用:为了解释这个名词,首先来理解下复用这个概念,复用也就是共用的意思,这样理解还是有些抽象, 为此,咱们来理解下复用在通信领域的使用,在通信领域中为了 ...

  6. codeforces785E

    http://codeforces.com/contest/785/problem/E 一道经典的求逆序对的题目,可以用树状数组套平衡树解决 平衡树需要支持插入一个数,删除一个数,找比 x 小的数的个 ...

  7. [AIR] 对存储器(Storage Volume)监听

    AIR 2.0及以上提供了对系统的存储器信息访问和监听的API.通过这些API,你不仅可以访问到硬盘文件系统,同时还可以监听通过USB或火线进行连接的移动存储设备,例如移动硬盘和以存储方式连接到计算机 ...

  8. [ActionScript 3.0] SharedObject的用法简介

    package com.models { import flash.net.SharedObject; /** * @author * @E-mail * @create 2015-6-12 下午2: ...

  9. docker kafka 修改hostname导致的问题

    昨天发现开发环境的3台kafka无法消费,所以今日kafka的容器执行如下语句 bash-4.4# ./kafka-topics.sh --describe --zookeeper 192.168.0 ...

  10. window phone8.1 hello,world(补交作业)

    第一步,我们需要创建一个简单的hello,world程序来帮助我们了解大致的方向. 下面是这个小例子的步骤: 1.打开vs,点击 文件-新建-项目:如图: