国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Spring Data JPA怎么調用存儲

瀏覽:3日期:2023-11-30 10:09:03

Spring Data JPA怎么調用存儲?JPA連接到數據庫,調用存儲過程,這樣的需求很常見。本文就針對這一點,講述如何使用spring Data 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
相關文章:
主站蜘蛛池模板: 无国产精品白浆是免费 | 午夜91理论片 | 免费va国产高清不卡大片 | 精品免费久久久久久成人影院 | 久久综合精品国产一区二区三区 | 国产一级特黄aa级特黄裸毛片 | 亚洲美女在线观看亚洲美女 | 国产成人午夜精品免费视频 | 欧美激情视频在线观看一区二区三区 | 成年午夜性爽快免费视频不卡 | 亚洲手机国产精品 | 精品欧美激情在线看 | 久久99国产精品亚洲 | 国产精品免费一区二区三区四区 | 自拍视频精品 | 国产精品欧美激情在线播放 | 国产午夜精品理论片免费观看 | 成人亚洲网 | 免费人成在线观看视频不卡 | gogo999亚洲肉体艺术大胆 | 91成人免费观看网站 | 国产亚洲综合在线 | 日本久久综合网 | 国产亚洲精品久久久久久久网站 | 欧美性色黄在线视 | 一区二区三区免费观看 | 日韩在线看片中文字幕不卡 | 精品国产无限资源免费观看 | 老司机亚洲精品影院在线 | 日本免费一二区视频 | 亚洲第一成年免费网站 | 日韩久久久精品首页 | 久久久99精品免费观看 | 国产欧美日韩视频在线观看 | 一区二区三区免费视频 www | 欧美曰韩一区二区三区 | 亚洲国产经典 | 手机看片免费基地你懂的 | 亚洲黄色官网 | 成人五级毛片免费播放 | 一区二区影院 |