【Mybatis学习】Mybatis学习之调用Mysql存储过程(1传入2输出)

Mybatis调用MySql中的存储过程(1传入2输出)

1.定义存储过程

目标数据库表结构:

存储过程:直接用语句执行总出现错误,暂时没解决,大致如下:
CREATE OR REPLACE PROCEDURE findByUname(uname VARCHAR(255),OUT sid INT,OUT rname VARCHAR(255))
BEGIN
	SELECT 
		id,real_name into sid,rname
	FROM t_student 
	WHERE username = uname;
END
利用数据库管理工具进行保存存储过程结果如下:

2.Mybatis调用存储过程

参数以Map形式传入。添加CALLABLE属性。
    <parameterMap id="map1" type="java.util.Map">
        <parameter property="uname" jdbcType="VARCHAR"  javaType="java.lang.String" mode="IN"/>
        <parameter property="sid"  jdbcType="INTEGER"  javaType="java.lang.Integer" mode="OUT"/>
        <parameter property="rname" jdbcType="VARCHAR"  javaType="java.lang.String" mode="OUT"/>
    </parameterMap>
    <select id="findByUname" parameterMap="map1" statementType="CALLABLE">
        <![CDATA[
          {call findByUname(?,?,?)}
        ]]>
    </select>

3.JAVA执行方法

Mapper接口方法:
void findByUname(Map<String,Object> map );
ServiceImpl:
public void findByUname(Map<String, Object> map) {
       studentDao.findByUname(map);
}
Controller:
        Map<String, Object> map = new HashMap<String,Object>();
        map.put("uname","1234");
        map.put("sid",null);
        map.put("rname","");
        studentService.findByUname(map);
        System.out.println(map.get("sid").toString()+"__"+map.get("rname"));
运行结果:


4.注意与总结

  1. 执行语句被CDATA包裹
  2. 传入、传出参数注意jdbcType类型需要与Mybatis中的typeHandler一致,否则报错
  3. 传入、传出参数带有mode属性,可用IN、OUT、INOUT
  4. Mysql传入、出的参数如果是VARCHAR需要附带字段长度,否则报错
  5. JAVA调用时注意传入Map时的参数形式


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值