mybatis调用mysql存储过程

、创建存储过程

CREATE PROCEDURE getCountByName(IN username varchar(32) character set utf8,OUT sum INT)
BEGIN
    select count(1) into sum from user where username=username;
end;

、配置Mapper.xml

<!-- 存储过程 -->
<select id="getCountByName" parameterType="java.util.Map" resultType="INTEGER" statementType="CALLABLE">
     {call getCountByName(
         #{name,mode=IN,jdbcType=VARCHAR},
         #{sum,mode=OUT,jdbcType=INTEGER}
     )}
</select>

三、测试代码

//存储过程
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "马");
map.put("sum",0);
Integer s = session.selectOne("winclpt.bean.userMapper.getCountByName", map);
Integer sum = (Integer) map.get("sum");
session.close();
System.out.println("此名字有多少个:"+s);
System.out.println(map.toString());

结果如下:

     此名字有多少个:null
     {name=马, sum=5}

结论:1.mapper.xml中配置的存储过程入参和出参名字必须和测试代码map集合中的key相同,不必和存储过程声明时的入参出参名称相同

   2.mybatis调用存储过程,入参和出参都存储在map集合中,然后传给selectOne方法,最后存储过程的执行结果也会放入此集合中

posted @ 2017-09-10 18:56  暗夜心慌方  阅读(531)  评论(0)    收藏  举报