一、环境

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 内可写多个存储过程,使用“,”隔开;
  • @NamedStoredProcedureQueryprocedureName参数是数据库中存储过程的名字;
  • 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 调用存储过程处理返回参数及结果集的更多相关文章

  1. spring data jpa 调用存储过程

    网上这方面的例子不是很多,研究了一下,列出几个调用的方法. 假如我们有一个mysql的存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `plus1in ...

  2. ibatis调用存储过程(无返回参数)

    ibatis调用存储过程例子: java: getSqlMapClientTemplate().insert(sql, paraMap) ibatis xml: <parameterMap id ...

  3. 关于Spring Data JPA 多表查询 返回自定义Vo的问题记录

    这两天开了一个新项目,使用SpringBoot+SpringData,  刚做了一个小功能,都是一张表的操作没什么问题,今天设计到了两张表联查,两张表各取了几个字段,组合成了一个vo, 当我用原生sq ...

  4. 关于spring data jpa的@query的传入参数是对象怎么匹配参数

    /** * Specifies methods used to obtain and modify person related information * which is stored in th ...

  5. EF6调用存储过程,返回多个结果集处理

    链接:http://www.codeproject.com/Articles/675933/Returning-Multiple-Result-Sets-from-an-Entity-Fram 案例: ...

  6. Hibernate、Mybatis与Spring Data JPA

    从零开始集成Springboot+MyBatis+JPA https://www.jianshu.com/p/e14c4a6f6871 MyBatis 与Hibernate的区别 http://xhr ...

  7. SpringBoot学习笔记:Spring Data Jpa的使用

    更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...

  8. spring boot + spring data jpa

    Spring Data Repository的核心接口是Repository(好像也没什么好惊讶的).这个接口需要领域类(Domain Class)跟领域类的ID类型作为参数.这个接口主要是让你能知道 ...

  9. EF 6 调用存储过程时返回多结果集和OUTPUT参数问题

    原文地址:http://q.cnblogs.com/q/56836/ 各位大侠,提问一个关于EF6调用存储过程时返回多结果集和OUTPUT参数问题 目前已经可以调用存储过程并且可以返回多个结果集. 但 ...

随机推荐

  1. 第十课html5 新增标签及属性 html5学习5

    一.常用新增标签 1.header:定义页面的页眉头部 2.nav:定义导航栏 3.footer:定义页面底部,页脚 4.article:定义文章 5.section:定义区域 6.aside:定义侧 ...

  2. Cesium 绘制点、线、面和测距

    本文基于ES6,采用React+Cesium的Webgis前端开发框架,目前threejs和cesium的结合正在研究中.此段代码采用原生javascript,可能过程中用到了es6的扁平化语法,如( ...

  3. Android为TV端助力:adb查找包名位置

    logcat | grep START 查找启动launcher adb shell "pm list packages -f | grep +包名" 查找包的路径

  4. Android设计模式总结

    1.复合模式:三层架构.MVC.MVP.MVVM 2.设计模式-单例模式 配置类的使用. 3.设计模式-模板方法 通过抽象类或接口提前定义要实现的方法. 4.设计模式-观察者模式 消息的通知. 5.设 ...

  5. Testlink1.9.17使用方法(第二章 登录&汉化设置)

    第二章 登录&汉化设置 QQ交流群:585499566 1,使用超级账户admin/admin登录. 2,登录后,会提示创建一个新的项目,先不要创建,先进入用户管理,设置成中文显示,也就是汉化 ...

  6. MyDAL - .Where() 之 .WhereSegment 根据条件 动态设置 Select查询条件 使用

    索引: 目录索引 一.API 列表 1.WhereSegment 属性,指示 根据条件 动态拼接 where 查询过滤条件 见如下示例. 二.API 单表-完整 方法 举例 // 上下文条件 变量 v ...

  7. python之list和tuple

    https://www.cnblogs.com/evablogs/p/6691743.html list和tuple区别: 相同:均为有序集合 异同:list可变,tuple一旦初始化则不可变 lis ...

  8. Java基础系列--02_运算符和程序的语句

    运算符: (1)算术运算符: +,-,*,/,%,++,--(加.减.乘.除.取余.自增,自减) ++和--的注意事项: a:他们的作用是自增或者自减 b:使用 1.单独使用 放在操作数据的前面和后面 ...

  9. [题解]洛谷P2709 小B的询问

    地址 是一道莫队模板题. 分析 设\(\text{vis[i]}\)表示元素\(\text{i}\)出现的次数 当一个元素进入莫队时,它对答案的贡献增加.有\(\delta Ans=(X+1)^2-X ...

  10. 如何在本地测试Fabric Code

    前一篇博客讲到了如何编译本地的Fabric Code成镜像文件,那么如果我们想改Fabric源代码,实现一些Fabric官方并没有提供的功能,该怎么办呢?这时我们除了改源码,增加需要的功能外,还需要能 ...