研究了一天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. ubuntu下mongodb常用命令

    1. 启动脚本 #!/bin/bash mongod --dbpath /usr/local/mongodb/data1 chmod +x run-mongodb 2. 关闭数据库服务 官方文档说可以 ...

  2. Reverse Nodes in k-Group leetcode java

    题目: Given a linked list, reverse the nodes of a linked list k at a time and return its modified list ...

  3. Java 解析Excel文件为JSON

    Excel转Json的需求 反正我对SSM基本不会的情况下来到现在这家公司,都是90后,感觉很好.第二天就给我开发任务,就是把用户上传的Excel文件转成JSON返回给前台用于大屏的数据展示. 解决方 ...

  4. 为什么谷歌的JSON响应以while(1);开头?

    问题(QUESTION): 我有个问题一直很好奇就是:为什么谷歌的JSON响应以while(1);开头?举个例子,当把谷歌日历打开和关掉时,会返回这样的JSON对象: while(1);[['u',[ ...

  5. 解决PHP在Windows IIS 上传的图片无法访问的问题

    最近在做一个网站项目遇到了一个很奇怪的问题,现记录下来希望可以帮助到其他的朋友   问题描述: 最近公司刚刚在香港购买了一个Windows Server 2008 服务器用于将一个客户的N个php网站 ...

  6. [effictive c++] 条款04 确定对象被使用前已被初始化

    成员初始化 在c和c++ 中,使用为初始化的类型经常会引发不可预料的错误,从而使得我们要花费巨大的时间用于调试查找问题,所以确定对象被使用前已被初始化是个非常好的习惯. 永远在使用之前对对象进行初始化 ...

  7. 在Win7上安装MySql5.2遇到Write configuration file的解决

    机器从XP翻新到Win7后,原有的环境也被清除了,因此找了个时间重新安装MySql. 以前轻车熟路的过程,在最后一环却卡住了,出现Write configuration file 错误. 以前从来没有 ...

  8. JSP基本的语法、3个编译指令、7个动作指令、9个内置对象

    一.jsp概述 JSP是java server page的缩写,其本质是一个简化的servlet,是一种动态网页技术标准.jsp页面是在HTML页面中嵌入java程序段.使用jsp开发的应用程序能够跨 ...

  9. JSP的页面连接和提交方式(web基础学习笔记六)

    一.GET请求新页面 1.1.超链接请求新页面 <!-- 超链接到page2 --> <a href="page2.jsp">链接到page2</a& ...

  10. C++使用hiredis连接带密码的redis服务

    c = redisConnect((char*)redis_host, redis_port); if (c->err) { /* Error flags, 0 when there is no ...