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

 更新时间:2021年11月11日 10:46:49   作者:weixin_39468112  
这篇文章主要介绍了Springmvc调用存储过程,并返回存储过程返还的数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决logback的日志文件路径问题

    解决logback的日志文件路径问题

    这篇文章主要介绍了解决logback的日志文件路径问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • IDEA 2019.2.2配置Maven3.6.2打开Maven项目出现 Unable to import Maven project的问题

    IDEA 2019.2.2配置Maven3.6.2打开Maven项目出现 Unable to import Maven

    这篇文章主要介绍了IDEA 2019.2.2配置Maven3.6.2打开Maven项目出现 Unable to import Maven project的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Java中StringTokenizer的用法简介汇总

    Java中StringTokenizer的用法简介汇总

    StringTokenizer 是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它),建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包,本文给大家整理了Java StringTokenizer用法,感兴趣的朋友一起看看吧
    2022-07-07
  • Java面试题-实现复杂链表的复制代码分享

    Java面试题-实现复杂链表的复制代码分享

    这篇文章主要介绍了Java面试题-实现复杂链表的复制代码分享,小编觉得还是挺不错的,具有参考价值,需要的朋友可以了解下。
    2017-10-10
  • 如何解决@NotBlank不生效的问题

    如何解决@NotBlank不生效的问题

    这篇文章主要介绍了如何解决@NotBlank不生效的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Spring Security权限管理实现接口动态权限控制

    Spring Security权限管理实现接口动态权限控制

    这篇文章主要为大家介绍了Spring Security权限管理实现接口动态权限控制,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 手把手带你理解java线程池之工作队列workQueue

    手把手带你理解java线程池之工作队列workQueue

    这篇文章主要介绍了java线程池之工作队列workQueue,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • @JsonSerialize注解的使用示例教程

    @JsonSerialize注解的使用示例教程

    在开发中,有时候某些字段需要特殊处理,比如我们有一个日期字段,当日期为NULL时给前端不返回NULL而返回为其他等信息,就需要自定义字段的序列化,这就是@JsonSerialize的用处,本文给大家介绍@JsonSerialize注解的使用,感兴趣的朋友一起看看吧
    2023-11-11
  • 如何使用Sentry 监控你的Spring Boot应用

    如何使用Sentry 监控你的Spring Boot应用

    这篇文章主要介绍了如何使用Sentry 监控你的Spring Boot应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java虚拟机调用Java主类的main()方法

    Java虚拟机调用Java主类的main()方法

    这篇文章主要介绍了Java虚拟机调用Java主类的main()方法,前一篇文章我们介绍了关于Java虚拟机HotSpot
    2021-11-11

最新评论