最近在看资料中涉及到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. Win10问题

    WIN10去除我的电脑上面的6个文件夹 把下面代码复制,保存到.reg中,然后执行即可(修改注册表文件.reg) Windows Registry Editor Version 5.00 ;如需还原去 ...

  2. Hopfield神经网络

    神经网络分类 多层神经网络:模式识别 相互连接型网络:通过联想记忆去除数据中的噪声 1982年提出的Hopfield神经网络是最典型的相互连结型网络. 联想记忆 当输入模式为某种状态时,输出端要给出与 ...

  3. CSS 文件引入

    CSS 文件引入 <html> <head> <!-- link标签引用其他文件.rel="stylesheet" 引用css.href=" ...

  4. jQuery 查找元素2

    jQuery 查找元素2 :first <ul> <li>list item 1</li> <li>list item 2</li> < ...

  5. zabbix链接规则

    通过磁盘  Disk for discovery    custom.vfs.dev.discovery 配置自动发现参考

  6. makefile中的patsubst函数有何作用?

    答:这是个模式替换函数,格式为: $(patsubst <pattern>,<replacement>,<text>) 查找text中的单词,如果匹配pattern ...

  7. Unity3d外包-就找北京动点软件

    承接Unity3d体感企业项目.游戏项目外包 北京公司.专业团队,成员为专业Unity3d产品公司一线开发人员,有大型产品开发经验: 提供优质的售后服务,保证产品质量,轻量级产品可以提供规范清晰的源代 ...

  8. poj3613

    注意最短路转移的单位元是对角线为0,其它为INF. #include <iostream> #include <cstdio> #include <cmath> # ...

  9. Python的日期函数datetime使用

    前记:Python的时间模块,time,datetime功能很丰富,要多源码学习一下,常用的strftime()和strptime()等等要灵活使用 import datetime now_time ...

  10. Fabric 1.0交易流程

    这篇文章详细介绍fabric的交易流程,以图片加文字的形式呈现. Fabric 1.0交易流程 fabric中的所有交易都是通过chaincode执行 1.应用程序客户端通过SDK调用证书服务(CA) ...