存儲過程創(chuàng)建及springboot代碼調(diào)用存儲過程方式
存儲過程創(chuàng)建及springboot代碼調(diào)用存儲過程
阿里推薦最好不使用存儲過程,因?yàn)榇鎯^程代碼過長涉及邏輯太多,導(dǎo)致修改業(yè)務(wù)時(shí)存儲過程代碼難以下手;于是沒看過存儲過程;
導(dǎo)致要用的時(shí)候不會,但是作為一名開發(fā)還是要會存儲過程,于是百度學(xué)習(xí)了一波在此記錄;
我是在navacat中創(chuàng)建的存儲過程

右鍵函數(shù)選擇新建函數(shù)

自定義函數(shù)名,選擇過程

然后添加輸入輸出參數(shù)點(diǎn)擊完成
我這里是輸出了三個(gè)參數(shù);這樣存儲過程就創(chuàng)建完成了;

右鍵運(yùn)行存儲過程函數(shù)也是生效的

接下來就要考慮在項(xiàng)目中
如何實(shí)現(xiàn)調(diào)用創(chuàng)建好的存儲過程;
import com.lansi.realtynavi.mapper.pojo.DataInfoPo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.CallableStatementCreator;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* @Description 存儲過程
* @Date 2021/3/18 13:50
* @Created by nuoyi
*/
@Component
public class ProcedureReturnListExecutor {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private TransactionTemplate template;
public List<DataInfoPo> get(){
ProcedureReturnListTransactionCallback callback = new ProcedureReturnListTransactionCallback();
return template.execute(callback);
}
class ProcedureReturnListTransactionCallback implements TransactionCallback<List<DataInfoPo>> {
@Override
public List<DataInfoPo> doInTransaction(TransactionStatus transactionStatus) {
return jdbcTemplate.execute(new CallableStatementCreator() {
@Override
public CallableStatement createCallableStatement(Connection con) throws SQLException {
String procedure = "{call selectData(?,?,?)}";
CallableStatement cs = con.prepareCall(procedure);
cs.registerOutParameter(1, Types.INTEGER);
cs.registerOutParameter(2, Types.BIGINT);
cs.registerOutParameter(3, Types.BIGINT);
return cs;
}
}, new CallableStatementCallback<List<DataInfoPo>>() {
@Override
public List<DataInfoPo> doInCallableStatement(CallableStatement cs)
throws SQLException, DataAccessException {
ResultSet rs = cs.executeQuery();
List<DataInfoPo> list = new ArrayList<>();
while (rs.next()) {
Integer id = rs.getInt(1);
Long dataInfo = rs.getLong(2);
Long dataTime = rs.getLong(3);
DataInfoPo dataInfoPo = new DataInfoPo();
dataInfoPo.setId(id);
dataInfoPo.setData_info(dataInfo);
dataInfoPo.setData_time(dataTime);
list.add(dataInfoPo);
}
return list;
}
});
}
}
}
在自己需要用的地方調(diào)用即可

這樣就完成啦。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot中使用jpa下hibernate的ddl-auto方式
這篇文章主要介紹了springboot中使用jpa下hibernate的ddl-auto方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
詳解spring cloud config整合gitlab搭建分布式的配置中心
這篇文章主要介紹了詳解spring cloud config整合gitlab搭建分布式的配置中心,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01
java 中設(shè)計(jì)模式(值對象)的實(shí)例詳解
這篇文章主要介紹了java 中設(shè)計(jì)模式(值對象)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09
Java學(xué)生信息管理系統(tǒng)設(shè)計(jì)(數(shù)據(jù)庫版)
這篇文章主要為大家詳細(xì)介紹了數(shù)據(jù)庫版的Java學(xué)生信息管理系統(tǒng)設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Java實(shí)現(xiàn)二叉樹的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法示例
這篇文章主要介紹了Java實(shí)現(xiàn)二叉樹的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法,結(jié)合實(shí)例形式詳細(xì)分析了二叉樹的定義、深度優(yōu)先遍歷與廣度優(yōu)先遍歷算法原理與相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04

