日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 人文关怀 >内容正文

人文关怀

Spring Data JPA怎么调用存储

發布時間:2023/11/19 人文关怀 39 博士
生活随笔 收集整理的這篇文章主要介紹了 Spring Data JPA怎么调用存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 {

  }

  關鍵要點:

  存儲過程使用了注釋@NamedStoredProcedureQuery,并綁定到一個JPA表。

  procedureName是存儲過程的名字

  name是JPA中的存儲過程的名字

  使用注釋@StoredProcedureParameter來定義存儲過程使用的IN/OUT參數

  3、創建Spring Data JPA數據庫

  下面我們來創建Spring Data JPA數據庫:

  public interface MyTableRepository extends CrudRepository

  @Procedure(name = "in_only_test")

  void inOnlyTest(@Param("inParam1") String inParam1);

  @Procedure(name = "in_and_out_test")

  String inAndOutTest(@Param("inParam1") String inParam1);

  }

  關鍵要點:

  @Procedure的name參數必須匹配@NamedStoredProcedureQuery的name

  @Param必須匹配@StoredProcedureParameter注釋的name參數

  返回類型必須匹配: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

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

總結

以上是生活随笔為你收集整理的Spring Data JPA怎么调用存储的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:Spring Data JPA怎么调用存储