概述
Springmvc调用存储过程,并返回存储过程返还的数据
java后端很多时候都需要和数据库进行交互,并返回业务数据。一般情况下都会采用执行SQL的方式来进行交互,但有些特别的场景时,也可以直接利用存储过程返回数据。
存储过程返回数据的好处是只需要一个调用,即可根据不同的参数返回不同的业务数据,这些业务数据有可能列名完全不一样。
实现如下
首先要先定义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",否则的话当存储过程返回的列不一致时,会导致系统报错。
定义基础类api:
public interface YjspgjService { String KEY="yjspgj.YjspgjService"; public ResultCommon selectTest(Map<String,Object> map); }
定义实现类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; } }
定义数据库操作类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); } }
调用controller:
@Controller @RequestMapping("/yjspgj") public class YjspgjController extends BaseController { @Autowired YjspgjService yjspgjService; private static Gson gson = new GsonBuilder().serializeNulls().create();//用于json格式的转化 @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调用存储过程,entity文件写法
<!--广告任务申请,被审核通过--> <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>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持靠谱客。
最后
以上就是火星上硬币为你收集整理的Springmvc调用存储过程,并返回存储过程返还的数据方式的全部内容,希望文章能够帮你解决Springmvc调用存储过程,并返回存储过程返还的数据方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复