最近在看资料中涉及到mybatis,突然想到mysql中的视图、存储过程、函数。现将在使用mybatis调用mysql的存储过程使用总结下:

使用的环境:mybatis3.4.6,mysql 5.6,数据库视图工具sqlyog(可也以使用其他的),springboot

1、创建存储过程,代码如下

DROP PROCEDURE IF EXISTS add_;
DELIMITER //
CREATE PROCEDURE add_(IN a INT,IN b INT,OUT c INT)
BEGIN
SELECT a+b INTO c;
END
//

2、测试:创建好存储过程add_后,执行以下语句,可以看到执行后的结果为8

SET @c = 0;

CALL add_(3,5,@c);

SELECT @c;

3、使用mybatis调用存储过程,这里有两种方式:

  方式一:注解形式(不用写配置文件),使用注解形式,mybatis版本要3.4以上

package com.example.demo.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.StatementType; import java.util.Map; @Mapper
public interface CallMapper { /**
* 注解形式调用存储过程
* @param map
*/
@Select("call add_(#{map.a,mode=IN,jdbcType=INTEGER},#{map.b,mode=IN,jdbcType=INTEGER},#{map.d,mode=OUT,jdbcType=INTEGER})")
@Options(statementType=StatementType.CALLABLE)
void callProcedure(@Param("map")Map map); /**
* 使用配置文件形式调用存储过程
* @param map
*/
// void callProcedure2(Map map);
}

  

测试类:

@RunWith(SpringRunner.class)
@SpringBootTest
public class CallMapperTest { @Resource
private CallMapper callMapper; @Test
public void testProcedure(){
Map<String,Object> map = new HashMap<>();
map.put("a",2);
map.put("b",3);
map.put("d",-1);
callMapper.callProcedure(map);
System.out.println(map);
} /*@Test
public void testProcedure2(){
Map<String,Object> map = new HashMap<>();
map.put("a",2);
map.put("b",3);
map.put("c",-1);
callMapper.callProcedure2(map);
System.out.println(map); }*/ }

测试结果:

  方式二:使用配置文件形式

配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.demo.dao.CallMapper" >
<select id="callProcedure2" statementType="CALLABLE" parameterMap="paraMap" resultType="java.lang.Integer">
call add_(?,?,?)
</select> <parameterMap type="java.util.Map" id="paraMap">
<parameter property="a" mode="IN" jdbcType="INTEGER"/>
<parameter property="b" mode="IN" jdbcType="INTEGER"/>
<parameter property="c" mode="OUT" jdbcType="INTEGER"/>
</parameterMap> </mapper>

mapper接口:

package com.example.demo.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.StatementType; import java.util.Map; @Mapper
public interface CallMapper { /**
* 注解形式调用存储过程
* @param map
*/
// @Select("call add_(#{map.a,mode=IN,jdbcType=INTEGER},#{map.b,mode=IN,jdbcType=INTEGER},#{map.d,mode=OUT,jdbcType=INTEGER})")
// @Options(statementType=StatementType.CALLABLE)
// void callProcedure(@Param("map")Map map); /**
* 使用配置文件形式调用存储过程
* @param map
*/
void callProcedure2(Map map);
}

测试类同方式一,把注解去掉即可。

测试结果:

以上就是本人做的两数相加的测试结果,当时注解形式不知道怎么获取存储过程的结果,其实只需传入map参数,在注解里稍做修改就可以了(

#{map.a,mode=IN,jdbcType=INTEGER},#{map.b,mode=IN,jdbcType=INTEGER},#{map.d,mode=OUT,jdbcType=INTEGER}

)

--------------------  完  -------------------

使用mybatis调用存储过程(注解形式和配置文件形式)的更多相关文章

  1. MyBatis基础:MyBatis调用存储过程(6)

    1. 存储过程准备 CREATE PROCEDURE sp_task ( IN userId INT ) BEGIN SELECT * FROM task WHERE user_id = userId ...

  2. Mybatis调用存储过程报错

    Mybatis调用存储过程 贴码 123456 Error querying database. Cause: java.sql.SQLException: User does not have ac ...

  3. mybatis调用存储过程(@Select方式)

    存储过程还不会写的同学可以参考我另一篇文章:https://www.cnblogs.com/liuboyuan/p/9375882.html 网上已经有很多用mybatis调用的教程了,但是大部分是x ...

  4. 关于用mybatis调用存储过程时的入参和出参的传递方法

    一.问题描述 a)         目前调用读的存储过程的接口定义一般是:void  ReadDatalogs(Map<String,Object> map);,入参和出参都在这个map里 ...

  5. mybatis 调用存储过程 返回游标 实例

    存储过程示例: create or replace procedure Fsp_Plan_CheckPrj(v_grantno varchar2, v_deptcode number, v_curso ...

  6. MyBatis——调用存储过程

    原文:http://www.cnblogs.com/xdp-gacl/p/4270352.html 一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 ...

  7. Mybatis 调用存储过程,使用Map进行输入输出参数的传递

    做个记录,以备后用 java代码: public String texuChange() throws Exception {        try {                         ...

  8. mybatis调用存储过程,获取返回的游标

    将调用存储过程参数放入map中,由于返回的游标中包含很多参数,所以再写一个resultmap与之对应,类型为hashmap.设置返回的jdbcType=CURSOR,resultMap设置为id对应的 ...

  9. MyBatis调用存储过程,含有返回结果集、return参数和output参数

    Ibatis是我们经常使用的O/R映射框架,mybats是ibatis被Google收购后重新命名的一个工程,当然也做了大量的升级.而调用存储过程也是一次额C/S架构模式下经常使用的手段,我们知道,i ...

随机推荐

  1. Python类的私有属性

    class Bar(object): __age = 18 sex = 'male' def __init__(self, ): pass def f(self): print(self.__age) ...

  2. 系统安装后的linux和vmware的网络配置

    一.1表示linux的版本   2表示linux内核的版本   3表示操作系统多少位  4.表示操作系统的名称 二.配置虚拟机网络 1.在办公室控制和使用服务器(机房) 2.远程连接 ###配置虚拟机 ...

  3. 【Maven】 Eclipse使用Maven创建Java Web 项目(一)

    需求:创建一个Servlet版本3.0,Java版本是1.7的Maven Web项目 创建环境: 系统:window 7 软件:Eclipse.Maven 创建步骤: 1.使用eclipse工具创建m ...

  4. SSM-网站后台管理系统制作(1)

    好久没写博客了,忙于考试和项目答辩,今天整理一下想弄的SSM:本人想做的是博客管理平台,和博客园,CSDN,stackoverflow这些类似. 老师先让做的是后台管理系统,先给出来吧. (讲解内容: ...

  5. JS设计模式(14)适配器模式

    什么是适配器模式? 定义:将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 主要解决:主要解决在软件系统中,常常要将一些"现存 ...

  6. i.MX6UL -- PWM用户空间使用方法【转】

    本文转载自:https://blog.csdn.net/u014486599/article/details/53010114 i.MX6UL -- PWM用户空间使用方法 开发平台: 珠海鼎芯D51 ...

  7. 【SCOI 2008】奖励关

    Problem Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关. 在这个奖励关里,系统将依次随机抛出 \(k\) 次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之 ...

  8. Flex外包公司——案例汇总

    Flex做的案例汇总: http://flex.org/showcase/ http://taggraph.com/everybody http://demoprod.informationbuild ...

  9. Redhat中关于httpd仓库安装的简要步骤

    创建repo-server: yum install httpd yum  install  httpd  -y       < -y 表示在安装过程中与界面交互时自动答复yes >sys ...

  10. 2018 German Collegiate Programming Contest (GCPC 18)

    2018 German Collegiate Programming Contest (GCPC 18) Attack on Alpha-Zet 建树,求lca 代码: #include <al ...