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方法,最后存储过程的执行结果也会放入此集合中

浙公网安备 33010602011771号