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-CSS-CSS Align
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 我的世界 ParaCraft 结合开源地图 OpenStreetMap 生成3D校园的方法简介
我的世界ParaCraft结合开源地图OpenStreetMap生成3D校园的方法简介 版本1.0 日期2019.2.3 作者Ray (82735589@qq.com) www.TimeGIS.com ...
- Android 设计模式之MVC模式
说到Android设计模式的MVC模式,估计很多人都是比较熟悉了,这里深入了解一下MVC到底是怎么回事,以ListView为例子讲解. 一.深入理解MVC概念 MVC即Model-View-Contr ...
- DEDE整站动态/静态转换
方法一:使用DEDE后台的SQL命令行工具 入口:织梦后台-系统-SQL命令行工具 DEDE整站动态化 将所有栏目设置为“使用动态页”: 将所有文档设置为“仅动态”: DEDE整站静态化 将所有栏目设 ...
- PL/SQL连接数据库时报错12154
研究了半天,最终我发现和环境变量没有半毛钱关系,就是tsnnames这个文件的格式错了.
- Maven settings.xml
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...
- Django-CRM项目学习(八)-客户关系系统整体实现(待完成!)
注意点:利用stark组件与rbac组件实现客户关系系统 1.需求整理与确认 1.1 客户关系系统整体需求 a
- IdentityServer4实战 - 与API单项目整合
一.前言 我们在实际使用 IdentityServer4 的时候,可能会在使用 IdentityServer4 项目添加一些API,比如 找回密码.用户注册.修改用户资料等,这些API与Identit ...
- kvm虚拟化介绍
一.虚拟化分类 1.虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互相 ...
- 类ArrayList
什么是ArrayList类 Java提供了一个容器 java.util.ArrayList 集合类,他是大小可变的数组的实现,存储在内的数据称为元素.此类提供一些方法来操作内部存储的元素. Array ...