Spring Data JPA高階 呼叫儲存過程

2021-08-08 15:54:54 字數 2873 閱讀 8662

本篇文章主要介紹了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_and_out_test", procedurename = "test_pkg.in_and_out_test", parameters = ) })

public class mytable implements serializable

關鍵要點:

儲存過程使用了注釋@namedstoredprocedurequery,並繫結到乙個jpa表。

procedurename是儲存過程的名字

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

使用注釋@storedprocedureparameter來定義儲存過程使用的in/out引數

3、建立spring data jpa資料庫

下面我們來建立spring data jpa資料庫:

public inte***ce mytablerepository extends crudrepository

關鍵要點:

@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 inte***ce mytablerepositorycustom

然後要確保主repository類繼承了這個介面。

複製**

**如下:

public inte***ce mytablerepository extends crudrepository, mytablerepositorycustom {}

6、建立repository實現類

接著該建立repository實現類了:

public class mytablerepositoryimpl implements mytablerepositorycustom 

}

可以以常規的方式進行呼叫:

@autowired

mytablerepository mytablerepository;

// 呼叫儲存過程

mytablerepository.inonlytest(inparam1)

spring data jpa實體繼承

spring jpa中我們要將sql對映到物件,尤其是在spring boot這種高度自動化的環境下使用,大量的最優目錄結構與命名規則可以大大降低配置,約定大於配置貫穿其中。例如我們定義查詢dao,繼承jparepository即可。然後返回的物件,我們可以定義model entity table ...

SpringData JPA分頁查詢

首先我們需要知道springdata jpa 的幾個介面 其實看名字就大概懂了,也可以很方便的使用 首先我們的持久化層繼承jparepository,相當於繼承了增刪改查的持久化層以及分頁查詢的持久化層 所以如果我們要使用分頁查詢 我們只需要直接呼叫 由一開始的圖也可以看到pageable的其中乙個...

springData Jpa簡單查詢

一 介面方法整理速查 下表針對於簡單查詢,即jparepository介面 繼承了crudrepository介面 pagingandsortingrepository介面 中的可訪問方法進行整理。1 先按照功能進行分類整理,分為儲存 刪除 查詢單個 查詢多個 其他5類。2 再將不建議使用的方法置灰...