您好,登錄后才能下訂單哦!
這篇文章給大家介紹Spring Data 利用JPA如何實(shí)現(xiàn)調(diào)用存儲(chǔ)過(guò)程,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
JPA連接到數(shù)據(jù)庫(kù),調(diào)用存儲(chǔ)過(guò)程,這樣的需求很常見(jiàn)。本文就針對(duì)這一點(diǎn),講述如何使用spring Data JPA調(diào)用存儲(chǔ)過(guò)程的方法。
1、存儲(chǔ)過(guò)程
假設(shè)存儲(chǔ)過(guò)程如下:
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;
這里有兩個(gè)存儲(chǔ)過(guò)程:
1)in_only_test
它需要一個(gè)輸入?yún)?shù)inParam1,但不返回值
2)in_and_out_test
它需要一個(gè)輸入?yún)?shù)inParam1,且返回值outParam1
2、@NamedStoredProcedureQueries
我們可以使用@NamedStoredProcedureQueries注釋來(lái)調(diào)用存儲(chǔ)過(guò)程。
@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)鍵要點(diǎn):
3、創(chuàng)建Spring Data JPA數(shù)據(jù)庫(kù)
下面我們來(lái)創(chuàng)建Spring Data JPA數(shù)據(jù)庫(kù):
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)鍵要點(diǎn):
4、調(diào)用
我們可以這樣調(diào)用存儲(chǔ)過(guò)程:
// 向存儲(chǔ)過(guò)程傳遞參數(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"); // 向存儲(chǔ)過(guò)程傳遞參數(shù)不返回值 myTableRepository.inOnlyTest(inParam);
5、其它技巧
如果上面的代碼不工作,可以這么解決。定義自定義的Repository來(lái)調(diào)用存儲(chǔ)過(guò)程昨晚本地查詢。
定義自定義的Repository:
public interface MyTableRepositoryCustom { void inOnlyTest(String inParam1); }
然后要確保主Repository類繼承了這個(gè)接口。
6、創(chuàng)建Repository實(shí)現(xiàn)類
接著該創(chuàng)建Repository實(shí)現(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ī)的方式進(jìn)行調(diào)用:
@Autowired MyTableRepository myTableRepository; // 調(diào)用存儲(chǔ)過(guò)程 myTableRepository.inOnlyTest(inParam1);
關(guān)于Spring Data 利用JPA如何實(shí)現(xiàn)調(diào)用存儲(chǔ)過(guò)程就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。