08_调用存储过程

1 需求

    查询得到男性或女性的数量, 如果传入的是0就女性否则是男性

2 准备数据表和存储过程

2.1 表及数据

  1. create table p_user(
  2. id int primary key auto_increment,
  3. name varchar(10),
  4. sex char(2)
  5. );
  6. insert into p_user(name,sex) values('A',"男");
  7. insert into p_user(name,sex) values('B',"女");
  8. insert into p_user(name,sex) values('C',"男");

2.2 存储过程

  1. #创建存储过程(查询得到男性或女性的数量, 如果传入的是0就女性否则是男性)
  2. DELIMITER $
  3. CREATE PROCEDURE mybatis.ges_user_count(IN sex_id INT, OUT user_count INT)
  4. BEGIN
  5. IF sex_id=0 THEN
  6. SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='女' INTO user_count;
  7. ELSE
  8. SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='男' INTO user_count;
  9. END IF;
  10. END
  11. $

2.3 调用存储过程

  1. #调用存储过程
  2. DELIMITER ;
  3. SET @user_count = 0;
  4. CALL mybatis.ges_user_count(1, @user_count);
  5. SELECT @user_count;

3 创建表的实体类

  1. public class PUser {
  2. private String id;
  3. private String name;
  4. private String sex;

4 userMapper.xml

  1. <mapper namespace="cn.imentors.mybatis.test8.userMapper">
  2. <!--
  3. 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性
  4. CALL mybatis.get_user_count(1, @user_count);
  5. -->
  6. <select id="getCount" statementType="CALLABLE" parameterMap="getCountMap">
  7. call mybatis.get_user_count(?,?)
  8. </select>
  9. <parameterMap type="java.util.Map" id="getCountMap">
  10. <parameter property="sexid" mode="IN" jdbcType="INTEGER"/>
  11. <parameter property="usercount" mode="OUT" jdbcType="INTEGER"/>
  12. </parameterMap>
  13. </mapper>
  • <select>
    • parameterMap:引用<parameterMap>
    • statementType:指定statement的真实类型,CALLABLE执行调用存储过程的语句。
  • <parameterMap>:定义多个参数的键值对
    • type:需要传递的参数的真实类型,java.util.Map
    • <parameter>:指定一个参数的key--value值,它的property对应的值是Map中的key值

5 测试

  1. @Test
  2. public void test() {
  3. SqlSessionFactory factory = MybatisUtils.getFactory();
  4. SqlSession session = factory.openSession();
  5. String statement = "cn.imentors.mybatis.test8.userMapper.getCount";
  6. Map<String, Integer> parameterMap = new HashMap<String, Integer>();
  7. parameterMap.put("sexid", 1);
  8. parameterMap.put("usercount", -1);
  9. session.selectOne(statement, parameterMap);
  10. //取值
  11. Integer result = parameterMap.get("usercount");
  12. System.out.println(result);
  13. session.close();
  14. }






捐赠我们
    良师益友工作室一直在致力于帮助编程爱好更加快速方便地学习编程,如果您对我们的成果表示认同并且觉得对你有所帮助,欢迎您对我们捐赠^_^。
    
原文地址:https://www.cnblogs.com/imentors/p/4810472.html