欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Data JPA調(diào)用存儲過程實例代碼

 更新時間:2017年04月17日 11:18:10   作者:資深架構(gòu)師  
本篇文章主要介紹了Spring Data JPA調(diào)用存儲過程實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

JPA連接到數(shù)據(jù)庫,調(diào)用存儲過程,這樣的需求很常見。本文就針對這一點,講述如何使用spring Data JPA調(diào)用存儲過程的方法。

1、存儲過程

假設(shè)存儲過程如下:

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

它需要一個輸入?yún)?shù)inParam1,但不返回值

2)in_and_out_test

它需要一個輸入?yún)?shù)inParam1,且返回值outParam1

2、@NamedStoredProcedureQueries

我們可以使用@NamedStoredProcedureQueries注釋來調(diào)用存儲過程。

@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 {
}

關(guān)鍵要點:

  1. 存儲過程使用了注釋@NamedStoredProcedureQuery,并綁定到一個JPA表。
  2. procedureName是存儲過程的名字
  3. name是JPA中的存儲過程的名字
  4. 使用注釋@StoredProcedureParameter來定義存儲過程使用的IN/OUT參數(shù)

3、創(chuàng)建Spring Data JPA數(shù)據(jù)庫

下面我們來創(chuàng)建Spring Data JPA數(shù)據(jù)庫:

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);
}

關(guān)鍵要點:

  1. @Procedure的name參數(shù)必須匹配@NamedStoredProcedureQuery的name
  2. @Param必須匹配@StoredProcedureParameter注釋的name參數(shù)
  3. 返回類型必須匹配:in_only_test存儲過程返回是void,in_and_out_test存儲過程必須返回String

4、調(diào)用

我們可以這樣調(diào)用存儲過程:

  // 向存儲過程傳遞參數(shù)并返回值
  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");
  // 向存儲過程傳遞參數(shù)不返回值
  myTableRepository.inOnlyTest(inParam);

5、其它技巧

如果上面的代碼不工作,可以這么解決。定義自定義的Repository來調(diào)用存儲過程昨晚本地查詢。

定義自定義的Repository:

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

然后要確保主Repository類繼承了這個接口。

復(fù)制代碼 代碼如下:

public interface MyTableRepository extends CrudRepository<MyTable, Long>, MyTableRepositoryCustom {}

6、創(chuàng)建Repository實現(xiàn)類

接著該創(chuàng)建Repository實現(xiàn)類了:

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();
}
}

可以以常規(guī)的方式進行調(diào)用:

@Autowired
MyTableRepository myTableRepository;
// 調(diào)用存儲過程
myTableRepository.inOnlyTest(inParam1);

是不是很簡單。以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java對象結(jié)構(gòu)與對象鎖的升級

    詳解Java對象結(jié)構(gòu)與對象鎖的升級

    這篇文章主要為大家詳細介紹了Java對象結(jié)構(gòu)與對象鎖的升級,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • SpringBoot之logback-spring.xml不生效的解決方法

    SpringBoot之logback-spring.xml不生效的解決方法

    這篇文章主要介紹了SpringBoot之logback-spring.xml不生效的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java數(shù)組隊列概念與用法實例分析

    Java數(shù)組隊列概念與用法實例分析

    這篇文章主要介紹了Java數(shù)組隊列概念與用法,結(jié)合實例形式分析了Java數(shù)組隊列相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-03-03
  • SpringBoot多模塊打包部署Docker的項目實戰(zhàn)

    SpringBoot多模塊打包部署Docker的項目實戰(zhàn)

    本文通過介紹最常見的Maven管理的Spring Boot項目多模塊打包部署Docker來介紹一下項目部署過程中操作流程和幾個需要注意的點,具有一定的參加價值,感興趣的可以了解一下
    2023-08-08
  • SpringBoot使用 druid 連接池來優(yōu)化分頁語句

    SpringBoot使用 druid 連接池來優(yōu)化分頁語句

    這篇文章主要介紹了SpringBoot使用 druid 連接池來優(yōu)化分頁語句,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java經(jīng)典面試題匯總:Spring Boot

    Java經(jīng)典面試題匯總:Spring Boot

    本篇總結(jié)的是Spring-Boot框架相關(guān)的面試題,后續(xù)會持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實習(xí)生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07
  • AJAX+JAVA用戶登陸注冊驗證的實現(xiàn)代碼

    AJAX+JAVA用戶登陸注冊驗證的實現(xiàn)代碼

    這篇文章主要介紹了AJAX+JAVA用戶登陸注冊驗證的實現(xiàn)代碼,通過ajax異步刷新頁面驗證用戶輸入的賬號密碼是否在數(shù)據(jù)庫中存在。非常具有實用價值,需要的朋友可以參考下
    2018-06-06
  • 一文搞懂Java中對象池的實現(xiàn)

    一文搞懂Java中對象池的實現(xiàn)

    池化并不是什么新鮮的技術(shù),它更像一種軟件設(shè)計模式,主要功能是緩存一組已經(jīng)初始化的對象,以供隨時可以使用。本文將為大家詳細講講Java中對象池的實現(xiàn),需要的可以參考一下
    2022-07-07
  • Spring-cloud 服務(wù)發(fā)現(xiàn)與消費(以ribbon為例)

    Spring-cloud 服務(wù)發(fā)現(xiàn)與消費(以ribbon為例)

    這篇文章主要介紹了Spring-cloud 服務(wù)發(fā)現(xiàn)與消費(以ribbon為例),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • springboot項目關(guān)閉swagger如何防止漏洞掃描

    springboot項目關(guān)閉swagger如何防止漏洞掃描

    這篇文章主要介紹了springboot項目關(guān)閉swagger如何防止漏洞掃描,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-05-05

最新評論