研究了一天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. flume 日志导入elasticsearch

    Flume配置 . flume生成的数据结构 <span style="font-size:18px;">"_index" : "logs ...

  2. 应用Flume+HBase采集和存储日志数据

    1. 在本方案中,我们要将数据存储到HBase中,所以使用flume中提供的hbase sink,同时,为了清洗转换日志数据,我们实现自己的AsyncHbaseEventSerializer. pac ...

  3. 开启otl的64位长整数支持

    要开启OTL的64位长整数支持,必须先定义宏 #define OTL_BIGINT __int64 // VC++, Borland C++ 或者 #define OTL_BIGINT long lo ...

  4. 点云数据(point cloud) 【转】

    转自caimagic的专栏 一:什么是点云数据 点云数据是指在一个三维坐标系统中的一组向量的集合.这些向量通常以X,Y,Z三维坐标的形式表示,而且一般主要用来代表一个物体的外表面形状.不经如此,除(X ...

  5. Objective-C-Category类别

    Object-C开发的时候有的时候会用到Category类,类似于Java和C#中扩展类,就是如果你觉得如果你觉得常用的方法在String中没有,可以根据业务需求和个人喜好写一个扩展类,然后在其中补充 ...

  6. Divide Two Integers leetcode java

    题目: Divide two integers without using multiplication, division and mod operator. 题解: 这道题我自己没想出来...乘除 ...

  7. (转)机器学习的数学基础(1)--Dirichlet分布

    转http://blog.csdn.net/jwh_bupt/article/details/8841644 这一系列(机器学习的数学基础)主要包括目前学习过程中回过头复习的基础数学知识的总结. 基础 ...

  8. 【linux】重置fedora root密码

    I forget root password on fedora,debian.fedora 17 fedora 18 fedora 19 fedora 20 fedora 21 fedora .de ...

  9. Android动态设置字体颜色

    步骤: 1.在values目录下的strings.xml文件中加入颜色:比方 <color name="ccc">#ccc</color> 2.假设你直接这 ...

  10. UILabel文字竖排

    方法一: UILabel *mindName = [[UILabel alloc]initWithFrame:kCR(, , ,)]; mindName.text = @"苏\n小\n明&q ...