研究了一天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. OpenCV学习(30) 轮廓defects

    上一篇教程中,我们学习了如何计算轮廓的凸包,其实对一个轮廓而言,可能它的凸包和它本身是重合的,也有可能不是重合的.比如下面左边图像的轮廓本身就是凸包,而右边图像的轮廓则不是.我们可以通过函数bool ...

  2. JavaScript游戏中的面向对象的设计

    简介: 从程序角度考虑,许多 JavaScript 都基于循环和大量的 if/else 语句.在本文中,我们可了解一种更聪明的做法 — 在 JavaScript 游戏中使用面向对象来设计.本文将概述原 ...

  3. IIS-将iis直接指向.net代码会出现错误

    这是由于没有bin文件导致的,将bin文件加上之后就可以了.

  4. 揭开Faiss的面纱 探究Facebook相似性搜索工具的原理

    https://www.leiphone.com/news/201703/84gDbSOgJcxiC3DW.html 本月初雷锋网报道,Facebook 开源了 AI 相似性搜索工具 Faiss.而在 ...

  5. (排序)快速排序QuickSort

    主要内容: 1.算法思想 2.快速排序算法 3.划分算法partition 4.快排过程图解 5.完整代码 1.算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一 ...

  6. Discuz常见小问题-如何修改板块和分区

    1 论坛-版块管理,然后添加一个版块名称(我把版块名称跟前面的主导航对应起来,比如都是论坛首页,在论坛首页下面放了三个版块,最新产品信息,最新培训信息,最新专题讨论) 2 点击编辑按钮 3 如果我设置 ...

  7. HDU 1199 &amp;&amp; ZOJ 2301 线段树离散化

    一段长度未知的线段.一种操作:a b c ,表示区间[a,b]涂为颜色C,w代表白色,b代表黑色,问终于的最长连续白色段,输出起始位置和终止位置 离散化处理.和寻常的离散化不同,须要把点化成线段.左闭 ...

  8. ZH奶酪:Ubuntu启动/重启/停止apache服务

    Start Apache 2 Server /启动apache服务 # /etc/init.d/apache2 start or $ sudo /etc/init.d/apache2 start Re ...

  9. Jquery Types 小结

    JavaScript provides several built-in(内置的) datatypes. In addition to those, this page documents virtu ...

  10. php之快速入门学习-18(PHP 面向对象)

    PHP 面向对象 在面向对象的程序设计(英语:Object-oriented programming,缩写:OOP)中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象. 在现实 ...