最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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類繼承了這個接口。

復制代碼 代碼如下:

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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Springboot Mybatis-Plus數(shù)據(jù)庫單元測試實戰(zhàn)(三種方式)

    Springboot Mybatis-Plus數(shù)據(jù)庫單元測試實戰(zhàn)(三種方式)

    這篇文章主要介紹了Springboot Mybatis-Plus數(shù)據(jù)庫單元測試實戰(zhàn)(三種方式),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java中十六進制和十進制之間互相轉(zhuǎn)換代碼示例

    Java中十六進制和十進制之間互相轉(zhuǎn)換代碼示例

    這篇文章主要給大家介紹了關(guān)于Java中十六進制和十進制之間互相轉(zhuǎn)換的相關(guān)資料,我們項目過程中總是要用到十進制與十六進制相互轉(zhuǎn)換的方法,需要的朋友可以參考下
    2023-07-07
  • Java,C#使用二進制序列化、反序列化操作數(shù)據(jù)

    Java,C#使用二進制序列化、反序列化操作數(shù)據(jù)

    這篇文章主要介紹了Java,C#使用二進制序列化、反序列化操作數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2014-10-10
  • 解密Java?Map如何高效地操作鍵值對

    解密Java?Map如何高效地操作鍵值對

    Map是Java中非常重要的數(shù)據(jù)結(jié)構(gòu)之一,它存儲鍵值對,可以通過鍵快速查找對應的值,是我們在實際開發(fā)中使用最為頻繁的數(shù)據(jù)結(jié)構(gòu)之一,下面小編就來和大家探討一下Map是如何高效地操作鍵值對的吧
    2023-09-09
  • Springboot整合itext實現(xiàn)PDF文件合并

    Springboot整合itext實現(xiàn)PDF文件合并

    這篇文章主要為大家詳細介紹了Springboot整合itext實現(xiàn)PDF文件合并以及識別圖片轉(zhuǎn)成PDF拼接的相關(guān)知識,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-11-11
  • SpringCloud Alibaba項目實戰(zhàn)之nacos-server服務(wù)搭建過程

    SpringCloud Alibaba項目實戰(zhàn)之nacos-server服務(wù)搭建過程

    Nacos 是阿里巴巴推出來的一個新開源項目,這是一個更易于構(gòu)建云原生應用的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺。本章節(jié)重點給大家介紹SpringCloud Alibaba項目實戰(zhàn)之nacos-server服務(wù)搭建過程,感興趣的朋友一起看看吧
    2021-06-06
  • 使用注解@Recover優(yōu)化丑陋的循環(huán)詳解

    使用注解@Recover優(yōu)化丑陋的循環(huán)詳解

    我們知道在實現(xiàn)一個功能的時候是可以使用不同的代碼來實現(xiàn)的,那么相應的不同實現(xiàn)方法的性能肯定也是有差別的,下面這篇文章主要給大家介紹了關(guān)于使用注解@Recover優(yōu)化丑陋的循環(huán)的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Java簡單實現(xiàn)線程池

    Java簡單實現(xiàn)線程池

    這篇文章主要為大家詳細介紹了Java簡單實現(xiàn)線程池,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Java實現(xiàn)的KNN算法示例

    Java實現(xiàn)的KNN算法示例

    這篇文章主要介紹了Java實現(xiàn)的KNN算法,結(jié)合實例形式分析了KNN算法的原理及Java定義與使用KNN算法流程、訓練數(shù)據(jù)相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • SpringMVC基于配置的異常處理器

    SpringMVC基于配置的異常處理器

    這篇文章主要為大家介紹了SpringMVC基于配置的異常處理器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05

最新評論

新龙县| 黔南| 庆城县| 尉氏县| 中江县| 上思县| 丹巴县| 凤山市| 屯门区| 宜昌市| 长沙市| 临沭县| 清徐县| 邻水| 东港市| 阳山县| 辽中县| 汝阳县| 安仁县| 汉中市| 赞皇县| 咸阳市| 宜都市| 上栗县| 扎囊县| 甘德县| 万年县| 丹棱县| 筠连县| 上蔡县| 甘洛县| 舒兰市| 五峰| 尼玛县| 彝良县| 信阳市| 讷河市| 凤山市| 南京市| 东乡族自治县| 达拉特旗|