Springmvc調(diào)用存儲(chǔ)過(guò)程,并返回存儲(chǔ)過(guò)程返還的數(shù)據(jù)方式
Springmvc調(diào)用存儲(chǔ)過(guò)程,并返回存儲(chǔ)過(guò)程返還的數(shù)據(jù)
java后端很多時(shí)候都需要和數(shù)據(jù)庫(kù)進(jìn)行交互,并返回業(yè)務(wù)數(shù)據(jù)。一般情況下都會(huì)采用執(zhí)行SQL的方式來(lái)進(jìn)行交互,但有些特別的場(chǎng)景時(shí),也可以直接利用存儲(chǔ)過(guò)程返回?cái)?shù)據(jù)。
存儲(chǔ)過(guò)程返回?cái)?shù)據(jù)的好處是只需要一個(gè)調(diào)用,即可根據(jù)不同的參數(shù)返回不同的業(yè)務(wù)數(shù)據(jù),這些業(yè)務(wù)數(shù)據(jù)有可能列名完全不一樣。
實(shí)現(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>
這里要重點(diǎn)說(shuō)明一下
1、返回的resultClass="java.util.HashMap",一定要是HashMap,如果直接寫(xiě)Map的話(huà)會(huì)報(bào)錯(cuò),因?yàn)镸ap是一個(gè)接口,不能對(duì)接口進(jìn)行實(shí)例化,HashMap是一個(gè)類(lèi),可以進(jìn)行實(shí)例化。
2、一定要加上remapResults="true",否則的話(huà)當(dāng)存儲(chǔ)過(guò)程返回的列不一致時(shí),會(huì)導(dǎo)致系統(tǒng)報(bào)錯(cuò)。
定義基礎(chǔ)類(lèi)api:
public interface YjspgjService {
String KEY="yjspgj.YjspgjService";
public ResultCommon selectTest(Map<String,Object> map);
}
定義實(shí)現(xiàn)類(lèi)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ù)庫(kù)操作類(lèi)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)用存儲(chǔ)過(guò)程,entity文件寫(xiě)法
<!--廣告任務(wù)申請(qǐng),被審核通過(guò)-->
<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>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA 2019.2.2配置Maven3.6.2打開(kāi)Maven項(xiàng)目出現(xiàn) Unable to import Maven
這篇文章主要介紹了IDEA 2019.2.2配置Maven3.6.2打開(kāi)Maven項(xiàng)目出現(xiàn) Unable to import Maven project的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Java中StringTokenizer的用法簡(jiǎn)介匯總
StringTokenizer?是出于兼容性的原因而被保留的遺留類(lèi)(雖然在新代碼中并不鼓勵(lì)使用它),建議所有尋求此功能的人使用?String?的?split?方法或?java.util.regex?包,本文給大家整理了Java?StringTokenizer用法,感興趣的朋友一起看看吧2022-07-07
Java面試題-實(shí)現(xiàn)復(fù)雜鏈表的復(fù)制代碼分享
這篇文章主要介紹了Java面試題-實(shí)現(xiàn)復(fù)雜鏈表的復(fù)制代碼分享,小編覺(jué)得還是挺不錯(cuò)的,具有參考價(jià)值,需要的朋友可以了解下。2017-10-10
Spring?Security權(quán)限管理實(shí)現(xiàn)接口動(dòng)態(tài)權(quán)限控制
這篇文章主要為大家介紹了Spring?Security權(quán)限管理實(shí)現(xiàn)接口動(dòng)態(tài)權(quán)限控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
手把手帶你理解java線(xiàn)程池之工作隊(duì)列workQueue
這篇文章主要介紹了java線(xiàn)程池之工作隊(duì)列workQueue,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
如何使用Sentry 監(jiān)控你的Spring Boot應(yīng)用
這篇文章主要介紹了如何使用Sentry 監(jiān)控你的Spring Boot應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Java虛擬機(jī)調(diào)用Java主類(lèi)的main()方法
這篇文章主要介紹了Java虛擬機(jī)調(diào)用Java主類(lèi)的main()方法,前一篇文章我們介紹了關(guān)于Java虛擬機(jī)HotSpot2021-11-11

