Springmvc调用存储过程,并返回存储过程返还的数据

编辑: admin 分类: java 发布时间: 2021-12-04 来源:互联网
目录
  • Springmvc调用存储过程,并返回存储过程返还的数据
    • 实现如下
    • 这里要重点说明一下
  • Springmvc调用存储过程,entity文件写法

    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>

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

    【本文由:日本cn2服务器 提供 转载请保留URL】