存儲過程創(chuàng)建及springboot代碼調(diào)用存儲過程方式
存儲過程創(chuàng)建及springboot代碼調(diào)用存儲過程
阿里推薦最好不使用存儲過程,因為存儲過程代碼過長涉及邏輯太多,導致修改業(yè)務時存儲過程代碼難以下手;于是沒看過存儲過程;
導致要用的時候不會,但是作為一名開發(fā)還是要會存儲過程,于是百度學習了一波在此記錄;
我是在navacat中創(chuàng)建的存儲過程
右鍵函數(shù)選擇新建函數(shù)
自定義函數(shù)名,選擇過程
然后添加輸入輸出參數(shù)點擊完成
我這里是輸出了三個參數(shù);這樣存儲過程就創(chuà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é)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
詳解Java利用實現(xiàn)對稱加密(DES、3DES、AES)
本篇文章主要介紹了Java利用實現(xiàn)對稱加密(DES、3DES、AES),具有一定的參考價值,有興趣的可以了解一下。2017-01-01Java整合mybatis實現(xiàn)過濾數(shù)據(jù)
這篇文章主要介紹了Java整合mybatis實現(xiàn)過濾數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-01-01javascript與jsp發(fā)送請求到servlet的幾種方式實例
本文分別給出了javascript發(fā)送請求到servlet的5種方式實例與 jsp發(fā)送請求到servlet的6種方式實例2018-03-03Springmvc發(fā)送json數(shù)據(jù)轉(zhuǎn)Java對象接收
這篇文章主要介紹了Springmvc發(fā)送json數(shù)據(jù)轉(zhuǎn)Java對象接收,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-10-10Spring @ExceptionHandler注解統(tǒng)一異常處理和獲取方法名
這篇文章主要介紹了Spring注解之@ExceptionHandler 統(tǒng)一異常處理和獲取方法名,在實際項目中,合理使用@ExceptionHandler能夠提高代碼的可維護性和用戶體驗,通過本文的解析和實踐,讀者可以更好地理解和掌握@ExceptionHandler的用法和原理2023-09-09