Spring data jpa 調用存儲過程處理返回參數及結果集
阿新 • • 發佈:2018-02-05
align 只需要 數據庫 num pri 調用 column mysq ini
一、環境
1.此隨筆內容基於spring boot整合的spring data jpa項目,
2.數據庫為mysql 5.7.9版本
二、內容
1. 新建存儲過程 pro_query_object
BEGIN
#Routine body goes here...a_theme_code varchar(10),out num int
select o.obj_code,o.obj_name,o.obj_id from qt_object o where o.theme_code=a_theme_code;
select count(*) into num from qt_object o where o.theme_code=a_theme_code GROUP BY o.theme_code;
END
2. 新建實體,首先把我們需要返回的結果集的實體字段定義好,然後加上@NamedStoredProcedureQueries 註解綁定存儲過程
- @Entity
@NamedStoredProcedureQueries({
//管理列表
@NamedStoredProcedureQuery(name = "pro_general_list", procedureName = "pro_general_list",
resultClasses = { QtObject.class },
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "a_theme_code", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "num", type = Integer.class) // 記錄滿足條件的總條數
}),
})
public class QtObject {
@Id
@Column(name = "obj_id")
private String objId;
private String obj_code;
private String obj_name;
// 此處省略get、set
}
此處 @NamedStoredProcedureQueries 內可寫多個存儲過程,使用“,”隔開,
@NamedStoredProcedureQuery
中
procedureName參數是數據庫中存儲過程的名字;name參數是JPA中的存儲過程的名字;resultClasses參數是返回結果集綁定的實體名稱(處理結果集重要參數);parameters
中使用
@StoredProcedureParameter來定義存儲過程使用的IN、OUT參數。
3.
完成實體後,我們在編寫調用方法
/// 調用存儲過程
public StoredProcedureQuery callStore(String themeCode) {
StoredProcedureQuery store = this.entityManager.createNamedStoredProcedureQuery("pro_general_list");
store.setParameter("a_theme_code", themeCode);
store.execute();
return store;
}
調用存儲過程時,需要先註入實體管理器EntityManager,調用其中的 createNamedStoredProcedureQuery方法,傳入jpa 的存儲過程名稱,然後只需要傳入in 參數,執行之後返回StoredProcedureQuery對象。
4. 結果處理
public ResultInfo queryInitGeneral(String themeCode) {
ResultInfo<List> resultInfo = new ResultInfo<List>();
StoredProcedureQuery storedProcedureQuery= callStore(start_date, end_date,themeCode,deptCode,obj_name,start_num,end_num);
Integer nums = (Integer)storedProcedureQuery.getOutputParameterValue("num");
resultInfo.setRows(storedProcedureQuery.getResultList());
resultInfo.setTotal(nums);
resultInfo.setResult(1);
resultInfo.setMsg("查詢成功!");
return resultInfo;
}
在調用過程中,使用StoredProcedureQuery中的getResultList()方法可以返回存儲過程執行之後的結果集(此處的結果集是一個,多個還未實驗);然後使用storedProcedureQuery的 getOutputParameterValue() 方法可以返回out 參數
Spring data jpa 調用存儲過程處理返回參數及結果集