Springmvc調(diào)用存儲過程,并返回存儲過程返還的數(shù)據(jù)方式
Springmvc調(diào)用存儲過程,并返回存儲過程返還的數(shù)據(jù)
java后端很多時候都需要和數(shù)據(jù)庫進行交互,并返回業(yè)務(wù)數(shù)據(jù)。一般情況下都會采用執(zhí)行SQL的方式來進行交互,但有些特別的場景時,也可以直接利用存儲過程返回數(shù)據(jù)。
存儲過程返回數(shù)據(jù)的好處是只需要一個調(diào)用,即可根據(jù)不同的參數(shù)返回不同的業(yè)務(wù)數(shù)據(jù),這些業(yè)務(wù)數(shù)據(jù)有可能列名完全不一樣。
實現(xiàn)如下
首先要先定義SqlMap.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" > <sqlMap namespace="YJSPGJ"> <parameterMap id="yjspgj_test" class="java.util.Map"> <parameter property="v_dxlx" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" /> <parameter property="i_qsrq" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" /> </parameterMap> <procedure id="yjspgj_test" resultClass="java.util.HashMap" remapResults="true" parameterMap="yjspgj_test"> {call sp_test_returnmap(?,?)} </procedure> </sqlMap>
這里要重點說明一下
1、返回的resultClass="java.util.HashMap",一定要是HashMap,如果直接寫Map的話會報錯,因為Map是一個接口,不能對接口進行實例化,HashMap是一個類,可以進行實例化。
2、一定要加上remapResults="true",否則的話當(dāng)存儲過程返回的列不一致時,會導(dǎo)致系統(tǒng)報錯。
定義基礎(chǔ)類api:
public interface YjspgjService { String KEY="yjspgj.YjspgjService"; public ResultCommon selectTest(Map<String,Object> map); }
定義實現(xiàn)類service:
@Service(YjspgjService.KEY) public class YjspgjServiceImpl extends SubService implements YjspgjService { @Autowired private YjspgjDao yjspgjDao; public ResultCommon selectTest(Map<String, Object> map) { // TODO Auto-generated method stub ResultListData result=new ResultListData(PasCloudCode.SUCCESS); List listData=yjspgjDao.selectTest(map); result.setRows(listData); return result; } }
定義數(shù)據(jù)庫操作類dao:
@Repository public class YjspgjDao { private static final Logger log = LoggerFactory.getLogger(YjspgjDao.class); @Autowired private IBaseDAO ibaseDAO; public List selectTest(Map<String,Object> map){ String sqlKey="yjspgj_test"; return (List)ibaseDAO.selectInfoByPara(sqlKey, map); } }
調(diào)用controller:
@Controller @RequestMapping("/yjspgj") public class YjspgjController extends BaseController { @Autowired YjspgjService yjspgjService; private static Gson gson = new GsonBuilder().serializeNulls().create();//用于json格式的轉(zhuǎn)化 @RequestMapping("/showData") @ResponseBody public void showData(HttpServletRequest request, HttpServletResponse response){ Map<String,Object> map=new HashMap(); setMap(map,request);//自行定義Map的值 ResultListData rc= (ResultListData) yjspgjService.selectTest(map); List list=rc.getRows(); for(int i=0;i<list.size();i++){ try { response.getWriter().write(list.get(i).toString()+"\n"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override protected Class setClass() { // TODO Auto-generated method stub return this.getClass(); } }
Springmvc調(diào)用存儲過程,entity文件寫法
<!--廣告任務(wù)申請,被審核通過--> <select id="approveAdTask" statementType="CALLABLE" parameterType="java.util.Map"> {call approveAdTask( #{sn,mode=IN,jdbcType=VARCHAR} ,#{ssn,mode=IN,jdbcType=VARCHAR} ,#{psn,mode=IN,jdbcType=VARCHAR} ,#{sname,mode=IN,jdbcType=VARCHAR})} </select>
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA 2019.2.2配置Maven3.6.2打開Maven項目出現(xiàn) Unable to import Maven
這篇文章主要介紹了IDEA 2019.2.2配置Maven3.6.2打開Maven項目出現(xiàn) Unable to import Maven project的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12Java面試題-實現(xiàn)復(fù)雜鏈表的復(fù)制代碼分享
這篇文章主要介紹了Java面試題-實現(xiàn)復(fù)雜鏈表的復(fù)制代碼分享,小編覺得還是挺不錯的,具有參考價值,需要的朋友可以了解下。2017-10-10Spring?Security權(quán)限管理實現(xiàn)接口動態(tài)權(quán)限控制
這篇文章主要為大家介紹了Spring?Security權(quán)限管理實現(xiàn)接口動態(tài)權(quán)限控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06如何使用Sentry 監(jiān)控你的Spring Boot應(yīng)用
這篇文章主要介紹了如何使用Sentry 監(jiān)控你的Spring Boot應(yīng)用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Java虛擬機調(diào)用Java主類的main()方法
這篇文章主要介紹了Java虛擬機調(diào)用Java主類的main()方法,前一篇文章我們介紹了關(guān)于Java虛擬機HotSpot2021-11-11