研究了一天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

Spring MVC+Mybatis 执行存储过程,使用Map进行参数的传递的更多相关文章

  1. spring Mvc + Mybatis 中使用junit

    在Spring Mvc + Mybatis的项目中我们有时候需要在测试代码中注入Dao操作数据库,对表进行增删改查,实现如下: 这是一般的maven项目项目结构 测试代码一般写在src/test/ja ...

  2. spring mvc+mybatis+多数据源切换

    spring mvc+mybatis+多数据源切换,选取oracle,mysql作为例子切换数据源.oracle为默认数据源,在测试的action中,进行mysql和oracle的动态切换. web. ...

  3. Spring+Spring MVC+MyBatis

    Spring+Spring MVC+MyBatis 目录 一.新建一个基于Maven的Web项目 二.创建数据库与表 三.添加依赖包 四.新建POJO实体层 五.新建MyBatis SQL映射层 六. ...

  4. Spring MVC 学习总结(十)——Spring+Spring MVC+MyBatis框架集成(IntelliJ IDEA SSM集成)

    与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和 ...

  5. ssm(spring mvc+mybatis)+netty4开发qiq

    发布时间:2018-10-30   技术:spring mvc+mybatis+nett4+layui   概述 简单快捷的IM方案,快速打造在线IM,可用于公司内网.外网通讯,客服系统等,实现了so ...

  6. 基于Spring+Spring MVC+Mybatis的B2C购物网站

    代码地址如下:http://www.demodashi.com/demo/12935.html 准备工作 当前项目运行的系统环境是MacOS,已经测试可以正常运行,并且之前开发的时候也在Windows ...

  7. Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用

    前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...

  8. 基于Spring + Spring MVC + Mybatis + shiro 高性能web构建

    一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJS,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详 ...

  9. spring + spring mvc + mybatis + react + reflux + webpack Web工程例子

    前言 最近写了个Java Web工程demo,使用maven构建: 后端使用spring + spring mvc + mybatis: 前端使用react + react-router+ webpa ...

随机推荐

  1. 三个和数组有关的程序题目(C++)

    题目一:有n个整数,使前面各数顺序向后移动m个位置 问题描述: 有n个整数,使前面各数顺序向后移动m个位置,最后m个数变成最前m个数 程序代码: #include<iostream> us ...

  2. C#匿名方法与Delegate类型转换错误

    问题描述 C#2.0出现了匿名方法, 这在一定程度上节省了我们维护代码上下文的精力, 也不需要思考为某个方法取什么名字比较合适. 在FCL的一些方法中要求传入一个Delegate类型的参数, 比如Co ...

  3. 关于html5获取用户地理位置

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  4. BFC是什么

    BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...

  5. 【JavaScript】实现复选框的全选、全部不选、反选

    以较为简洁的程序实现复选框的全选.全部不选.反选 操作. 并且将可变的部分设置为JS的参数,以实现代码复用. 全选和全不选 第一个参数为复选框名称,第二个参数为是全选还是全部不选. function ...

  6. Java从零开始学五(数据类型转换)

    一.数据类型转换 分为“自动类型转换”和“强制类型转换” 二.自动类型转换 低级别------>高级别 byte b=7; int i=b; System.out.println("i ...

  7. Mapreduce实例-分组排重(group by distinct)

    public class GroupComparator implements RawComparator<MyBinaryKey> { @Override public int comp ...

  8. C#.Net中操作XML方法一

    我们知道XML是一种可标记性的语言,用来标记数据.定义数据类型,是一种执行用户对自己的标记语言进行定义的源语言.由于结构好.而且easy理解,就好比一棵树,层次关系分明,因此也经常把一些数据存储到XM ...

  9. 算法笔记_172:历届试题 波动数列(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度 ...

  10. 【CMS】DedeCMS Error: (PHP 5.3 and above) Please set 'request_order' ini value to include C,G and P (recommended: 'CGP') in php.ini

    DedeCMS Error: (PHP 5.3 and above) Please set 'request_order' ini value to include C,G and P (recomm ...