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
Spring MVC+Mybatis 执行存储过程,使用Map进行参数的传递的更多相关文章
- spring Mvc + Mybatis 中使用junit
在Spring Mvc + Mybatis的项目中我们有时候需要在测试代码中注入Dao操作数据库,对表进行增删改查,实现如下: 这是一般的maven项目项目结构 测试代码一般写在src/test/ja ...
- spring mvc+mybatis+多数据源切换
spring mvc+mybatis+多数据源切换,选取oracle,mysql作为例子切换数据源.oracle为默认数据源,在测试的action中,进行mysql和oracle的动态切换. web. ...
- Spring+Spring MVC+MyBatis
Spring+Spring MVC+MyBatis 目录 一.新建一个基于Maven的Web项目 二.创建数据库与表 三.添加依赖包 四.新建POJO实体层 五.新建MyBatis SQL映射层 六. ...
- Spring MVC 学习总结(十)——Spring+Spring MVC+MyBatis框架集成(IntelliJ IDEA SSM集成)
与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和 ...
- ssm(spring mvc+mybatis)+netty4开发qiq
发布时间:2018-10-30 技术:spring mvc+mybatis+nett4+layui 概述 简单快捷的IM方案,快速打造在线IM,可用于公司内网.外网通讯,客服系统等,实现了so ...
- 基于Spring+Spring MVC+Mybatis的B2C购物网站
代码地址如下:http://www.demodashi.com/demo/12935.html 准备工作 当前项目运行的系统环境是MacOS,已经测试可以正常运行,并且之前开发的时候也在Windows ...
- Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用
前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...
- 基于Spring + Spring MVC + Mybatis + shiro 高性能web构建
一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJS,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详 ...
- spring + spring mvc + mybatis + react + reflux + webpack Web工程例子
前言 最近写了个Java Web工程demo,使用maven构建: 后端使用spring + spring mvc + mybatis: 前端使用react + react-router+ webpa ...
随机推荐
- 三个和数组有关的程序题目(C++)
题目一:有n个整数,使前面各数顺序向后移动m个位置 问题描述: 有n个整数,使前面各数顺序向后移动m个位置,最后m个数变成最前m个数 程序代码: #include<iostream> us ...
- C#匿名方法与Delegate类型转换错误
问题描述 C#2.0出现了匿名方法, 这在一定程度上节省了我们维护代码上下文的精力, 也不需要思考为某个方法取什么名字比较合适. 在FCL的一些方法中要求传入一个Delegate类型的参数, 比如Co ...
- 关于html5获取用户地理位置
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...
- BFC是什么
BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...
- 【JavaScript】实现复选框的全选、全部不选、反选
以较为简洁的程序实现复选框的全选.全部不选.反选 操作. 并且将可变的部分设置为JS的参数,以实现代码复用. 全选和全不选 第一个参数为复选框名称,第二个参数为是全选还是全部不选. function ...
- Java从零开始学五(数据类型转换)
一.数据类型转换 分为“自动类型转换”和“强制类型转换” 二.自动类型转换 低级别------>高级别 byte b=7; int i=b; System.out.println("i ...
- Mapreduce实例-分组排重(group by distinct)
public class GroupComparator implements RawComparator<MyBinaryKey> { @Override public int comp ...
- C#.Net中操作XML方法一
我们知道XML是一种可标记性的语言,用来标记数据.定义数据类型,是一种执行用户对自己的标记语言进行定义的源语言.由于结构好.而且easy理解,就好比一棵树,层次关系分明,因此也经常把一些数据存储到XM ...
- 算法笔记_172:历届试题 波动数列(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度 ...
- 【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 ...