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 ...
随机推荐
- Linq的使用场景简介和认识
一:C#的一个分支Linq 二:学Linq需要有一些基础知识 1. var 隐式类型 2. 匿名类型/匿名方法 3. 自动属性 4. 委托/泛型的委托 5. lambda 6. 扩展方法 7. 对象初 ...
- Android-自定义进度条
圆形进度条,不确定进度条: <!-- 原生圆形进度条 不确定进度条 --> <ProgressBar android:layout_width="wrap_content& ...
- [LeetCode 题解]: Anagrams
Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...
- [LeetCode 题解]: Count and Say
The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...
- 安装和使用 Elasticsearch(1.1.1)+marvel插件、Kibana插件
Elasticsearch是开源搜索平台的新成员,实时数据分析的神器,发展迅猛,基于 Lucene.RESTful.分布式.面向云计算设计.实时搜索.全文搜索.稳定.高可靠.可扩展.安装+使用方便,介 ...
- 提示缺少python.h解决办法
在安装uwsgi时,提示缺少python.h In file included :: plugins/python/uwsgi_python.h::: fatal error: Python.h: N ...
- Python 串口通信 GUI 开发
在项目中遇到树莓派串口通信问题.由于本人一直从事.net 开发,希望将树莓派系统换成Win10 IOT版.但是在测试过程中出现无法找到串口的问题.最终也没有解决.最终按照领导要求,linux (了解不 ...
- ML.NET---.NET下的机器学习引擎(简介)
ML.NET 是一个跨平台的开源机器学习框架,它可以使 .NET 开发人员更容易的开展机器学习工作. ML.NET 允许 .NET 开发人员开发自己的模型,即使没有机器学习的开发经验,也可以很容易的将 ...
- coffee主题美化内容概要
1.具备自动生浮动标题目录(可隐藏) 2.页首目录概要 3.主标题有明显的标志背景颜色,二级标题缩进合适 4.一级.二级标题下图片缩进合适 5.博客签名 6.背景音乐列表 7.打赏 8.联系方式(QQ ...
- [ActionScript 3.0] 使用Embed在类中嵌入字体
package { import flash.display.Sprite; import flash.text.Font; import flash.text.TextField; import f ...