全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Spring Data JPA调用存储过程实例代码

JPA连接到数据库,调用存储过程,这样的需求很常见。本文就针对这一点,讲述如何使用spring Data JPA调用存储过程的方法。

1、存储过程

假设存储过程如下:

CREATE OR REPLACE PACKAGE test_pkg AS
  PROCEDURE in_only_test (inParam1 IN VARCHAR2);
  PROCEDURE in_and_out_test (inParam1 IN VARCHAR2, outParam1 OUT VARCHAR2);
END test_pkg;
/
CREATE OR REPLACE PACKAGE BODY test_pkg AS
  PROCEDURE in_only_test(inParam1 IN VARCHAR2) AS
  BEGIN
   DBMS_OUTPUT.PUT_LINE('in_only_test');
  END in_only_test;
  PROCEDURE in_and_out_test(inParam1 IN VARCHAR2, outParam1 OUT VARCHAR2) AS
  BEGIN
   outParam1 := 'Woohoo Im an outparam, and this is my inparam ' || inParam1;
  END in_and_out_test;
END test_pkg;

这里有两个存储过程:

1)in_only_test

它需要一个输入参数inParam1,但不返回值

2)in_and_out_test

它需要一个输入参数inParam1,且返回值outParam1

2、@NamedStoredProcedureQueries

我们可以使用@NamedStoredProcedureQueries注释来调用存储过程。

@Entity
@Table(name = "MYTABLE")
@NamedStoredProcedureQueries({
    @NamedStoredProcedureQuery(name = "in_only_test", procedureName = "test_pkg.in_only_test", parameters = {
        @StoredProcedureParameter(mode = ParameterMode.IN, name = "inParam1", type = String.class) }),
    @NamedStoredProcedureQuery(name = "in_and_out_test", procedureName = "test_pkg.in_and_out_test", parameters = {
        @StoredProcedureParameter(mode = ParameterMode.IN, name = "inParam1", type = String.class),
        @StoredProcedureParameter(mode = ParameterMode.OUT, name = "outParam1", type = String.class) }) })
public class MyTable implements Serializable {
}

关键要点:

  1. 存储过程使用了注释@NamedStoredProcedureQuery,并绑定到一个JPA表。
  2. procedureName是存储过程的名字
  3. name是JPA中的存储过程的名字
  4. 使用注释@StoredProcedureParameter来定义存储过程使用的IN/OUT参数

3、创建Spring Data JPA数据库

下面我们来创建Spring Data JPA数据库:

public interface MyTableRepository extends CrudRepository<MyTable, Long> {
  @Procedure(name = "in_only_test")
  void inOnlyTest(@Param("inParam1") String inParam1);

  @Procedure(name = "in_and_out_test")
  String inAndOutTest(@Param("inParam1") String inParam1);
}

关键要点:

  1. @Procedure的name参数必须匹配@NamedStoredProcedureQuery的name
  2. @Param必须匹配@StoredProcedureParameter注释的name参数
  3. 返回类型必须匹配:in_only_test存储过程返回是void,in_and_out_test存储过程必须返回String

4、调用

我们可以这样调用存储过程:

  // 向存储过程传递参数并返回值
  String inParam = "Hi Im an inputParam";
  String outParam = myTableRepository.inAndOutTest(inParam);
  Assert.assertEquals(outParam, "Woohoo Im an outparam, and this is my inparam Hi Im an inputParam");
  // 向存储过程传递参数不返回值
  myTableRepository.inOnlyTest(inParam);

5、其它技巧

如果上面的代码不工作,可以这么解决。定义自定义的Repository来调用存储过程昨晚本地查询。

定义自定义的Repository:

public interface MyTableRepositoryCustom {
  void inOnlyTest(String inParam1);
}

然后要确保主Repository类继承了这个接口。

复制代码 代码如下:
public interface MyTableRepository extends CrudRepository<MyTable, Long>, MyTableRepositoryCustom {}

6、创建Repository实现类

接着该创建Repository实现类了:

public class MyTableRepositoryImpl implements MyTableRepositoryCustom { 
@PersistenceContext 
private EntityManager em;

@Override
public void inOnlyTest(String inParam1) {
  this.em.createNativeQuery("BEGIN in_only_test(:inParam1); END;").setParameter("inParam1", inParam1)
      .executeUpdate();
}
}

可以以常规的方式进行调用:

@Autowired
MyTableRepository myTableRepository;
// 调用存储过程
myTableRepository.inOnlyTest(inParam1);

是不是很简单。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# jpa  # 调用存储过程  # 存储过程  # spring  # Spring Data JPA实现动态查询的两种方法  # spring data jpa使用详解(推荐)  # Spring Data Jpa的四种查询方式详解  # Spring Data JPA实现动态条件与范围查询实例代码  # Spring Data JPA 实现多表关联查询的示例代码  # Spring Data JPA 复杂/多条件组合分页查询  # Spring Data Jpa 复杂查询方式总结(多表关联及自定义分页)  # Spring Data JPA的作用和用法小结  # 返回值  # 自定义  # 我们可以  # 很简单  # 可以使用  # 但不  # 绑定  # 连接到  # 如何使用  # 大家多多  # 昨晚  # 使用了  # 有两个  # 继承了  # StoredProcedureParameter  # br  # Im  # Woohoo  # inparam 


相关文章: 贸易公司网站制作流程,出口贸易网站设计怎么做?  济南网站制作的价格,历城一职专官方网站?  如何在阿里云域名上完成建站全流程?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  如何在万网自助建站中设置域名及备案?  网站制作网站,深圳做网站哪家比较好?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  建站之星如何实现网站加密操作?  建站主机如何选?高性价比方案全解析  详解jQuery中基本的动画方法  如何选择高效响应式自助建站源码系统?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  网站代码制作软件有哪些,如何生成自己网站的代码?  如何选择高效稳定的ISP建站解决方案?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  网站制作公司排行榜,抖音怎样做个人官方网站  ,购物网站怎么盈利呢?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  c++怎么用jemalloc c++替换默认内存分配器【性能】  建站与域名管理如何高效结合?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  网站制作公司,橙子建站是合法的吗?  公司网站的制作公司,企业网站制作基本流程有哪些?  制作网页的网站有哪些,电脑上怎么做网页?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  红河网站制作公司,红河事业单位身份证如何上传?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  宝塔建站助手安装配置与建站模板使用全流程解析  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  黑客入侵网站服务器的常见手法有哪些?  如何在云主机上快速搭建多站点网站?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  建站之星如何取消后台验证码生成?  建站之星如何一键生成手机站?  平台云上自助建站如何快速打造专业网站?  教程网站设计制作软件,怎么创建自己的一个网站?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  如何在阿里云虚拟主机上快速搭建个人网站?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  佛山网站制作系统,佛山企业变更地址网上办理步骤?  建站10G流量真的够用吗?如何应对访问高峰?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  常州企业建站如何选择最佳模板?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。