當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring Data JPA 从入门到精通~@Procedure 储存过程的查询方法
生活随笔
收集整理的這篇文章主要介紹了
Spring Data JPA 从入门到精通~@Procedure 储存过程的查询方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們通過 @Procedure 來介紹一下,JPA 對儲存過程的支持。
(1)@Procedure 源碼如下:
public @interface Procedure {// 數據庫里面儲存過程的名稱String value() default "";// 數據庫里面儲存過程的名稱String procedureName() default "";//在EntityManager中的名字,NamedStoredProcedureQuery使用String name() default "";//輸出參數的名字String outputParameterName() default ""; }(2)首先創建一個儲存過程名字叫 plus1inout 有兩個參數、兩個結果。
CREATE PROCEDURE plus1inout(IN arg int, OUT res int) BEGINSELECT (arg+10) into res; END(3)我們可以使用 @NamedStoredProcedureQueries 注釋來調用存儲過程,這個必須定義在一個實體上面。
@Entity @NamedStoredProcedureQuery(name = "User.plus1", procedureName = "plus1inout", parameters = { @StoredProcedureParameter(mode = ParameterMode.IN, name = "arg", type = Integer.class), @StoredProcedureParameter(mode = ParameterMode.OUT, name = "res", type = Integer.class) }) public class User {//這個是一個Procedure實體類,可以通過NamedStoredProcedureQueries在這個類里面定義多個儲存過程的查詢。 }關鍵要點:
- 存儲過程使用了注釋 @NamedStoredProcedureQuery,并綁定到一個 JPA 表;
- procedureName 是存儲過程的名字;
- name 是 JPA 中的存儲過程的名字;
- 使用注釋 @StoredProcedureParameter 來定義存儲過程使用的 IN/OUT 參數。
(4)直接通過自定義過的 Repository 完成儲存過程的調用。
public interface MyUserRepository extends CrudRepository<User, Long> { @Procedure("plus1inout")//通過儲存過程的名字 Integer explicitlyNamedPlus1inout(Integer arg); @Procedure(procedureName = "plus1inout")//通過儲存過程的名字 Integer plus1inout(Integer arg); @Procedure(name = "User.plus1IO")//自定義的儲存過程的名字 Integer entityAnnotatedCustomNamedProcedurePlus1IO(@Param("arg") Integer arg); }關鍵要點:
- @Procedure 的 procedureName 參數必須匹配 @NamedStoredProcedureQuery 的 procedureName。
- @Procedure 的 name 參數必須匹配 @NamedStoredProcedureQuery 的 name。
- @Param 必須匹配 @StoredProcedureParameter 注釋的 name 參數。
- 返回類型必須匹配:in_only_test存儲過程返回是 void,in_and_out_test存儲過程必須返回 String。
總結
以上是生活随笔為你收集整理的Spring Data JPA 从入门到精通~@Procedure 储存过程的查询方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java并发编程实战~软件事务内存
- 下一篇: Spring Data JPA 禁止自动