-- mybatis调用存储过程 -- 数据库:mysql5.5 一、提出需求   查询得到男性或女性的数量, 如果传入的是2就女性,否则是男性 二、准备数据库表和存储过程 create table p_user(
id int primary key auto_increment,
name varchar(10), sex char(2) );

insert into p_user(name,sex,code) values('A',"男",1);
insert into p_user(name,sex,code) values('B',"女",2);
insert into p_user(name,sex,code) values('C',"男",1);

-- 创建存储过程(查询得到男性或女性的数量, 如果传入的是2就女性否则是男性) DELIMITER $ CREATE PROCEDURE mybatis.ges_user_count(IN sex_id INT, OUT user_count INT) BEGIN
IF sex_id=2 THEN SELECT COUNT() FROM mybatis.p_user WHERE p_user.sex='女' INTO user_count; ELSE SELECT COUNT() FROM mybatis.p_user WHERE p_user.sex='男' INTO user_count; END IF; END $ -- mysql客户端调用存储过程 DELIMITER ; SET @user_count = 0; CALL mybatis.ges_user_count(1, @user_count); SELECT @user_count;

-- 另外一种写法,可以直接把入参传给sql的字段 DELIMITER $ CREATE PROCEDURE get_user_count(IN sex_code INT, OUT user_count INT) BEGIN SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.code = sex_code INTO user_count; END $

-- mysql客户端调用存储过程 SET @user_count = 0; CALL get_user_count(20, @user_count); SELECT @user_count;

***此处需要注意的是,入参或者出参的名字一定不能和表中的字段名字相同.

三、编辑userMapper.xml   编辑userMapper.xml文件,添加如下的配置项

<!-- 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 --> <select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE"> CALL mybatis.ges_user_count(?,?) </select>

 <parameterMap type="java.util.Map" id="getUserCountMap">
     <parameter property="sexid" mode="IN" jdbcType="INTEGER"/>
     <parameter property="usercount" mode="OUT" jdbcType="INTEGER"/>
 </parameterMap>

四、编写单元测试代码

/**

  • @author gacl

  • 测试调用存储过程 */ public class Test6 {

    @Test public void testGetUserCount(){ SqlSession sqlSession = MyBatisUtil.getSqlSession();

     String statement = "me.gacl.mapping.userMapper.getUserCount";//映射sql的标识字符串
     Map<String, Integer> parameterMap = new HashMap<String, Integer>();
     parameterMap.put("sexid", 1);
     parameterMap.put("usercount", -1); //给个初始值,0也可以
     sqlSession.selectOne(statement, parameterMap);
     Integer result = parameterMap.get("usercount"); //执行后,结果会通过出参返回
     System.out.println(result);
     sqlSession.close();
    

    } }