Spring data jpa 调用存储过程处理返回参数及结果集
一、环境
1.此随笔内容基于spring boot整合的spring data jpa项目,
2.数据库为mysql 5.7.9版本
二、内容
1. 新建存储过程 pro_query_object
BEGIN
#Routine body goes here...a_theme_code varchar(10),out num int
select o.obj_code,o.obj_name,o.obj_id from qt_object o where o.theme_code=a_theme_code;
select count(*) into num from qt_object o where o.theme_code=a_theme_code GROUP BY o.theme_code;
END
2. 新建实体,首先把我们需要返回的结果集的实体字段定义好,然后加上@NamedStoredProcedureQueries 注解绑定存储过程
@Entity
@NamedStoredProcedureQueries({
//管理列表
@NamedStoredProcedureQuery(name = "pro_general_list", procedureName = "pro_general_list",
resultClasses = { QtObject.class },
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "a_theme_code", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "num", type = Integer.class) // 记录满足条件的总条数
}),
})
public class QtObject {
@Id
@Column(name = "obj_id")
private String objId;
private String obj_code;
private String obj_name;
// 此处省略get、set
}此处:
- @NamedStoredProcedureQueries 内可写多个存储过程,使用“,”隔开;
@NamedStoredProcedureQuery中procedureName参数是数据库中存储过程的名字;- name参数是JPA中的存储过程的名字;resultClasses参数是返回结果集绑定的实体名称(处理结果集重要参数);
parameters中使用@StoredProcedureParameter来定义存储过程使用的IN、OUT参数。
3.完成实体后,我们在编写调用方法/// 调用存储过程
public StoredProcedureQuery callStore(String themeCode) {
StoredProcedureQuery store = this.entityManager.createNamedStoredProcedureQuery("pro_general_list");
store.setParameter("a_theme_code", themeCode);
store.execute();
return store;
}
调用存储过程时,需要先注入实体管理器EntityManager,调用其中的 createNamedStoredProcedureQuery方法,传入jpa 的存储过程名称,然后只需要传入in 参数,执行之后返回StoredProcedureQuery对象。
4. 结果处理
public ResultInfo queryInitGeneral(String themeCode) {
ResultInfo<List> resultInfo = new ResultInfo<List>();
StoredProcedureQuery storedProcedureQuery= callStore(start_date, end_date,themeCode,deptCode,obj_name,start_num,end_num);
Integer nums = (Integer)storedProcedureQuery.getOutputParameterValue("num");
resultInfo.setRows(storedProcedureQuery.getResultList());
resultInfo.setTotal(nums);
resultInfo.setResult(1);
resultInfo.setMsg("查询成功!");
return resultInfo;
}
在调用过程中,使用StoredProcedureQuery中的getResultList()方法可以返回存储过程执行之后的结果集(此处的结果集是一个,多个还未实验);
然后使用storedProcedureQuery的 getOutputParameterValue() 方法可以返回out 参数
Spring data jpa 调用存储过程处理返回参数及结果集的更多相关文章
- spring data jpa 调用存储过程
网上这方面的例子不是很多,研究了一下,列出几个调用的方法. 假如我们有一个mysql的存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `plus1in ...
- ibatis调用存储过程(无返回参数)
ibatis调用存储过程例子: java: getSqlMapClientTemplate().insert(sql, paraMap) ibatis xml: <parameterMap id ...
- 关于Spring Data JPA 多表查询 返回自定义Vo的问题记录
这两天开了一个新项目,使用SpringBoot+SpringData, 刚做了一个小功能,都是一张表的操作没什么问题,今天设计到了两张表联查,两张表各取了几个字段,组合成了一个vo, 当我用原生sq ...
- 关于spring data jpa的@query的传入参数是对象怎么匹配参数
/** * Specifies methods used to obtain and modify person related information * which is stored in th ...
- EF6调用存储过程,返回多个结果集处理
链接:http://www.codeproject.com/Articles/675933/Returning-Multiple-Result-Sets-from-an-Entity-Fram 案例: ...
- Hibernate、Mybatis与Spring Data JPA
从零开始集成Springboot+MyBatis+JPA https://www.jianshu.com/p/e14c4a6f6871 MyBatis 与Hibernate的区别 http://xhr ...
- SpringBoot学习笔记:Spring Data Jpa的使用
更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...
- spring boot + spring data jpa
Spring Data Repository的核心接口是Repository(好像也没什么好惊讶的).这个接口需要领域类(Domain Class)跟领域类的ID类型作为参数.这个接口主要是让你能知道 ...
- EF 6 调用存储过程时返回多结果集和OUTPUT参数问题
原文地址:http://q.cnblogs.com/q/56836/ 各位大侠,提问一个关于EF6调用存储过程时返回多结果集和OUTPUT参数问题 目前已经可以调用存储过程并且可以返回多个结果集. 但 ...
随机推荐
- Web前端2019面试总结
基础知识点 1.水平垂直居中 子绝父相,子盒子设置绝对定位,设置top:50%;left:50%,margin-top:-50%;margin-left:-50%; 子绝父相,子盒子设置绝对定位, ...
- CSS中的一下小技巧2之CSS3动画勾选运用
使用CSS3实现动画勾选 相信大家在项目中会经常遇到这种需求:勾选框.现在用CSS3来实现一个动画勾选,只需要一个标签即可完成: 这次需要用到CSS中伪类 after,这个小技巧也是很容易忘记的,所以 ...
- python的学习笔记01_3 基本运算符 流程控制if while 字符串常用办法
基本运算符 运算符 计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算,今天我们暂只学习算数运算.比较运算.逻辑运 ...
- vue.js 学习笔记3——TypeScript
目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...
- pyspider爬网页出现中文乱码的解决办法
为什么会出现乱码呢?按照binux的说法 这就是 lxml 的蛋疼之处,给它 unicode 它有的时候它不认,给它 bytes 它又处理不好 方法1: response.content = (res ...
- 对ES6的yield示例分析
近期ES6标准如火如荼的发展,其中主要还是各大浏览器的支持,最重要厂商支付宝,微信的支持,使得国内的发展也很迅猛. 这里主要是对yield关键字的,yield实际上可以看作是一种新的中断机制,大家都知 ...
- 分享两个细致、全面讲解Vue和React源码的链接
Vue: 1.http://hcysun.me/vue-design/ 2.https://ustbhuangyi.github.io/vue-analysis/(带视频,但收费) React: 3. ...
- python接口自动化-传 json 参数
一.post请求有两种方法传json参数: 1.传json参数(自动转 json ) 2.传data参数(需 json 转换) 代码参考: payload = { "Jodie": ...
- 《JAVA程序设计》_第九周学习总结
一.学习内容 1.数据库的建立.配置 在官网先下载好MySQL.navicat for MySQL.XAMPP.MySQL-connecter 在XAMPP中点击start开启MySQL 在navic ...
- iOS CATransition 自定义转场动画
https://www.jianshu.com/p/39c051cfe7dd CATransition CATransition 是CAAnimation的子类(如下图所示),用于控制器和控制器之间的 ...