您的位置:首页 > 数据库 > MySQL

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

2017-11-19 21:23 330 查看

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.注意与总结

执行语句被CDATA包裹
传入、传出参数注意jdbcType类型需要与Mybatis中的typeHandler一致,否则报错
传入、传出参数带有mode属性,可用IN、OUT、INOUT
Mysql传入、出的参数如果是VARCHAR需要附带字段长度,否则报错
JAVA调用时注意传入Map时的参数形式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: