hibernate 执行存储过程 方法
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 执行存储过程 方法的更多相关文章
- [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 【hibernate 执行方法未插入数据库】hibernate的save方法成功执行,但是未插入到数据库
今天做项目,碰上这个问题: hibernate的save方法成功执行,但是未插入到数据库. Dao层代码: @Override public void save(T t) { this.getSess ...
- Hibernate如何执行存储过程?
Hibernate如何执行存储过程? @Overridepublic Boolean setVarValue(final String processInstanceId, final String ...
- EF增删查改加执行存储过程和sql语句,多种方法汇总
ActionUrl c = new ActionUrl() { ActionName="test", RequestUrl="/123/123", SubTim ...
- Oracle定时任务执行存储过程备份日志记录表
写在前面 需求 1.备份系统日志表T_S_LOG, 按照操作时间字段OPERATETIME, 将每天的日志增量备份到另一张表. 思路 1.创建一张数据结构完全相同的表T_S_LOG_BAK作为备份表 ...
- Dapper完美兼容Oracle,执行存储过程,并返回结果集。
Dapper完美兼容Oracle,执行存储过程,并返回结果集. 这个问题,困扰了我整整两天. 刚刚用到Dapper的时候,感觉非常牛掰.特别是配合.net 4.0新特性dynamic,让我生成泛型集合 ...
- JAVA使用JDBC技术操作SqlServer数据库执行存储过程
Java使用JDBC技术操作SqlServer数据库执行存储过程: 1.新建SQLSERVER数据库:java_conn_test 2.新建表:tb_User 3.分别新建三个存储过程: 1>带 ...
- 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好
HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...
- Oracle中执行存储过程call和exec区别
Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...
随机推荐
- html中怎么样让div并排显示
html中的div默认是流式显示,每个div会占用一整行 <html> <head> <meta http-equiv="Content-Type" ...
- Android开发环境包下载地址
Android SDK Android NDK Android Studio 官方下载地址 (网上转来的) 如果下载速度很慢或者无法下载,有三种解决方法 1.忍耐. 2.使用P2SP下载工具,比如 ...
- php 与java安卓客户端的查询交互
PHP 服务器端: function getids() { $this->output->set_header('Content-Type: application/json; chars ...
- IIS 7.5 使用appliaction Initialization
https://blogs.msdn.microsoft.com/amol/2013/01/25/application-initialization-ui-for-iis-7-5/ 待续 正在测试 ...
- CentOS下Docker与.netcore(四)之 三剑客之一Docker-machine+jenkins简单自动化部署
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...
- Autofac的简单使用
今天记录一下学习Autofac的过程. 之前对IoC与DI一直很迷糊,今天研究了前辈们的文章后,才对IoC和DI有了一个初步的了解.感谢前辈们的无私奉献! 文章地址: 依赖注入和控制反转的理解,写的太 ...
- for循环 | range 对象
# ### for循环 # 循环 遍历 迭代 # 把列表的元素一一的拿出来遍历 listvar = ["黄雄大","黄文","黄仪正",&q ...
- struts2官方 中文教程 系列二:Hello World项目
先贴个本帖的地址,免得其它网站被爬去了struts2入门系列二之Hello World 即 http://www.cnblogs.com/linghaoxinpian/p/6898779.html ...
- [BZOJ]4650 优秀的拆分(Noi2016)(哈希+二分)
传送门 题解 听说大佬们这题都是用SA秒掉的 然而SA的时间复杂度的确很优秀,缺点就是看不太懂…… 然后发现一位大佬用哈希华丽的过了此题,而且讲的特别清楚->这里 我们只要考虑以每一个点结尾 ...
- 二叉树的遍历python 代码
__author__ = "WSX" class Node: def __init__(self, val = None, left = None, right = None): ...