博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用mybatis调用存储过程(注解形式和配置文件形式)
阅读量:5107 次
发布时间:2019-06-13

本文共 2971 字,大约阅读时间需要 9 分钟。

最近在看资料中涉及到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
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
map = new HashMap<>(); map.put("a",2); map.put("b",3); map.put("c",-1); callMapper.callProcedure2(map); System.out.println(map); }*/ }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

测试结果:

 

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

配置文件:

 

 

 

 

 

 

 

 

 

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}

)

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

 

转载于:https://www.cnblogs.com/skyxia/p/9927224.html

你可能感兴趣的文章
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
UseIIS
查看>>
为什么int型最大的数是2147483647
查看>>
数据库连接的三层架构
查看>>
集合体系
查看>>
vi命令提示:Terminal too wide
查看>>
nyoj 5 Binary String Matching(string)
查看>>
引用 移植Linux到s3c2410上
查看>>
BizTalk 2010 单机安装
查看>>
人与人之间的差距是从大学开始的
查看>>
vue 开发过程中遇到的问题
查看>>
[Swift]LeetCode341. 压平嵌套链表迭代器 | Flatten Nested List Iterator
查看>>
MySQL5.7开多实例指导
查看>>
贪心——洛谷P1016 旅行家的预算
查看>>
【学习整理】树状数组 区间修改+查询
查看>>
你知道电脑硬盘怎么分区吗?
查看>>
去除Visual Studio引号中的内容和注释中出现的波浪下划线
查看>>
supervisor配置详解
查看>>
java 获取当月第一天和最后一天 获取前一个月第一天和最后一天
查看>>
空间滤波
查看>>