zoukankan      html  css  js  c++  java
  • 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. }






    捐赠我们
        良师益友工作室一直在致力于帮助编程爱好更加快速方便地学习编程,如果您对我们的成果表示认同并且觉得对你有所帮助,欢迎您对我们捐赠^_^。
        
  • 相关阅读:
    轻量级数据库sqlite的使用
    Integer引发的思考
    css限制显示行数
    数据库 chapter 17 数据仓库与联机分析处理技术
    数据库 chapter 15 对象关系数据库系统
    数据库 chapter 16 XML数据库
    数据库 chapter 14 分布式数据库系统
    数据库 chapter 11 并发控制
    数据库 chapter 12 数据库管理系统
    数据库 chapter 13 数据库技术新发展
  • 原文地址:https://www.cnblogs.com/imentors/p/4810472.html
Copyright © 2011-2022 走看看