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 //
mysql存储文档ample.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);
使⽤mybatis 调⽤存储过程(注解形式和配置⽂件形式)
最近在看资料中涉及到mybatis ,突然想到mysql 中的视图、存储过程、函数。现将在使⽤mybatis 调⽤mysql 的存储过程使⽤总结下:使⽤的环境:mybatis3.4.6,mysql 5.6,数据库视图⼯具sqlyog(可也以使⽤其他的),springboot 1、创建存储过程,代码如下
2、测试:创建好存储过程add_后,执⾏以下语句,可以看到执⾏后的结果为8SET @c = 0;CALL add_(3,5,@c);SELECT @c;
3、使⽤mybatis 调⽤存储过程,这⾥有两种⽅式:
⽅式⼀:注解形式(不⽤写配置⽂件),使⽤注解形式,mybatis 版本要3.4以上
测试类:
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 "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="ample.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接⼝:
ample.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}
)
-------------------- 完 -------------------
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论