文档章节

Spring MVC+Mybatis 执行存储过程,使用Map进行参数的传递

微笑出品
 微笑出品
发布于 2017/02/07 09:43
字数 756
阅读 23
收藏 0

Spring MVC+Mybatis 执行存储过程,使用Map进行参数的传递

研究了一天mybatis如何执行存储过程,基本了解了ORM的设计思想,在map层面进行对象关系映射有两种思路。

根据不同的业务使用不同的思路:

一、实体类和数据库映射,就是将数据库中的字段和java实体类中的对象对应起来,这是最普遍的做法。

就是这个样子:

复制代码

<resultMap id="BaseResultMap" type="com.kt.model.Funeral" >
    <id column="applyid" property="applyid" jdbcType="BIGINT" />
    <id column="no" property="no" jdbcType="SMALLINT" />
    <result column="employeecd" property="employeecd" jdbcType="BIGINT" />
    <result column="agentcd" property="agentcd" jdbcType="BIGINT" />
    <result column="applydate" property="applydate" jdbcType="DATE" />
    <result column="applytype" property="applytype" jdbcType="SMALLINT" />
    <result column="startday" property="startday" jdbcType="DATE" />
    <result column="endday" property="endday" jdbcType="DATE" />
    <result column="applyreason" property="applyreason" jdbcType="VARCHAR" />
    <result column="detailreason" property="detailreason" jdbcType="VARCHAR" />
    <result column="applytime" property="applytime" jdbcType="TIMESTAMP" />
    <result column="admitflg" property="admitflg" jdbcType="SMALLINT" />
  </resultMap>

复制代码

二、将数据库的字段和java的Map对应起来,也就是key-value的形式,个人认为这种方法适合存储过程的执行,因为存储过程的参数很多情况下都是通过自定义

来进行参数传递的。这样,就ORM的形式更加灵活。

具体实例:

1、dao层接口定义

复制代码

public interface IFuneralDao {
    
    void saveFuneral(Map<String, Object> funeralMap);
    
    void getFuneral(Map<String, Object> funeralMap);
    
    @SuppressWarnings("rawtypes")
    List<Map> getFuneralMore(@Param("applyId") Long applyId);
}

复制代码

2、dao层对应mapper.xml

复制代码

<!-- 添加数据 -->
  <parameterMap type="Map" id="InsertFuneralMap">
    <parameter property="v_in_employeecd" jdbcType="BIGINT" javaType="Long" mode="IN" />
    <parameter property="v_in_applytype" jdbcType="SMALLINT" javaType="Short" mode="IN" />
    <parameter property="v_in_applyreason" jdbcType="VARCHAR" javaType="String" mode="IN" />
    <parameter property="v_in_detailreason" jdbcType="VARCHAR" javaType="String" mode="IN" />
    <parameter property="v_in_startend" jdbcType="VARCHAR" javaType="String" mode="IN" />
    <parameter property="v_in_agentcd" jdbcType="BIGINT" javaType="Long" mode="IN" />
    <parameter property="o_result" jdbcType="SMALLINT" javaType="Short" mode="OUT"/>
 </parameterMap>
  
   <select id="saveFuneral" parameterMap="InsertFuneralMap" statementType="CALLABLE">  
      {call workplan.proc_insertfuneral_info(
              ?,?,?,?,?,?,?
      ) }  
  </select>  
  
  <!-- 抽取数据,返回多个结果存到List<Map>中-->
  <resultMap type="Map" id="getFuneralMoreResult">
     <result column="employeecd" property="employeecd" javaType="Long" jdbcType="BIGINT" />
     <result column="employeename" property="employeename" javaType="String" jdbcType="VARCHAR"/>
     <result column="applytype" property="applytype" javaType="Short" jdbcType="SMALLINT"/>
     <result column="reason" property="reason" javaType="String" jdbcType="VARCHAR"/>
     <result column="startend" property="startend" javaType="String" jdbcType="VARCHAR"/>
     <result column="days" property="days" javaType="String" jdbcType="VARCHAR"/>
     <result column="method" property="method" javaType="Integer" jdbcType="SMALLINT"/>
  </resultMap>
  
  <!-- 查询信息 -->
 <sql id="funeral_info_single" >
    "employeecd", "employeename", "applytype", "reason", "startend", "days", "method"
  </sql>
  
  <select id="getFuneralMore"  resultMap="getFuneralMoreResult">
          select 
           <include refid="funeral_info_single" />
           from
           workplan.proc_getfuneral_info(#{applyId,jdbcType=BIGINT})
  </select>
  
  <!-- 查询单条数据 -->
  <parameterMap type="Map" id="getFuneralMap">
    <parameter property="v_in_applyid" jdbcType="BIGINT" javaType="Long" mode="IN" />
    <parameter property="employeecd" jdbcType="BIGINT" javaType="Long" mode="OUT" />
    <parameter property="employeename" jdbcType="VARCHAR" javaType="String" mode="OUT" />
    <parameter property="applytype" jdbcType="SMALLINT" javaType="Short" mode="OUT" />
    <parameter property="reason" jdbcType="VARCHAR" javaType="String" mode="OUT" />
    <parameter property="startend" jdbcType="VARCHAR" javaType="String" mode="OUT" />
    <parameter property="days" jdbcType="SMALLINT" javaType="Short" mode="OUT"/>
    <parameter property="method" jdbcType="SMALLINT" javaType="Short" mode="OUT"/>
 </parameterMap>
  
   <select id="getFuneral" parameterMap="getFuneralMap" statementType="CALLABLE">  
      {call workplan.proc_getfuneral_info(
              ?,?,?,?,?,?,?,?
      ) }  
  </select>

复制代码

3、service层调用

复制代码

@Service("funeralService")
public class FuneralServiceImpl implements IFuneralService {
    @Resource
    private IFuneralDao funeralDao;
    
    /**
     * 添加信息
     * 将参数通过Map传入到数据库后,返回值同样会保存到传入值的那个Map中
     * @param funeralProc
     * @return 1、成功 0、失败
     */
    public boolean saveFuneral(Map<String, Object> funeralMap) {
        funeralDao.saveFuneral(funeralMap); 
        return (Short) funeralMap.get("o_result")>0;
    }
    
    /**
     * 获取单条信息
     */
    public Map<String , Object> getFuneral(Map<String, Object> funeralMap){
        funeralDao.getFuneral(funeralMap);
        return funeralMap;
    }
    /**
     * 获取多条数据,用List存取
     */
    @SuppressWarnings("rawtypes")
    public List<Map> getFuneralMore(Long applyId) {
        return funeralDao.getFuneralMore(applyId);
    }

    
}

本文转载自:http://www.cnblogs.com/huaxingtianxia/p/5628828.html

微笑出品
粉丝 1
博文 57
码字总数 5691
作品 0
大连
私信 提问
Spring MVC Flash Attribute 的讲解与使用示例

Spring MVC 3.1版本加了一个很有用的特性,Flash属性,它能解决一个长久以来缺少解决的问题,一个POST/Redirect/GET模式问题。 正常的MVC Web应用程序在每次提交都会POST数据到服务器。一个正...

0595
2014/04/09
21K
24
【Spring boot实践】Spring boot 认识

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Rsx/article/details/89003901 文章目录 Spring boot 简介 Spring boot是spring 家族中的一个全新的框架,它用...

不专业得Cook-任晓帅
04/03
0
0
SpringMVC——redirect重定向跳转传值

spring MVC框架controller间跳转,需重定向。有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示。 首先先来介绍一下不带参数的重定向: 我在后台一个c...

引鸩怼孑
2015/04/10
5.9K
0
jquery ajax 后台返回值 到前台不会处理了

我用的是spring mvc+mybatis 在添加用户的时候想返回信息 这个是我的controller和jsp和打印信息,我想取出来那个map里面的value 用data.msg是不可以的 我已经试过了 ,拜托大家了 我弄了一个...

薄暮凉年
2014/08/19
13.8K
7
Spring MVC的底层源码

一、Spring MVC请求处理流程 引用spring in action上的一张图来说明了springmvc的核心组件和请求处理流程: DispatcherServlet是springmvc中的前端控制器(front controller),负责接收request...

小致dad
04/27
68
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
6
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部