• MyBatis学习总结(六)——调用存储过程


    一、提出需求

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

    二、准备数据库表和存储过程

    复制代码
     1 create table p_user(  
     2     id int primary key auto_increment,  
     3     name varchar(10),
     4     sex char(2)
     5 ); 
     6 
     7 insert into p_user(name,sex) values('A',"男");  
     8 insert into p_user(name,sex) values('B',"女");  
     9 insert into p_user(name,sex) values('C',"男");  
    10 
    11 -- 创建存储过程(查询得到男性或女性的数量, 如果传入的是0就女性否则是男性)
    12 DELIMITER $
    13 CREATE PROCEDURE mybatis.ges_user_count(IN sex_id INT, OUT user_count INT)
    14 BEGIN  
    15 IF sex_id=0 THEN
    16 SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='女' INTO user_count;
    17 ELSE
    18 SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='男' INTO user_count;
    19 END IF;
    20 END 
    21 $
    22 
    23 -- 调用存储过程
    24 DELIMITER ;
    25 SET @user_count = 0;
    26 CALL mybatis.ges_user_count(1, @user_count);
    27 SELECT @user_count;
    复制代码

    三、编辑userMapper.xml

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

    复制代码
     1 <!-- 
     2         查询得到男性或女性的数量, 如果传入的是0就女性否则是男性
     3      -->
     4     <select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE">
     5         CALL mybatis.ges_user_count(?,?)
     6     </select>
     7     
     8     <!--
     9         parameterMap.put("sexid", 0);
    10         parameterMap.put("usercount", -1);
    11      -->
    12     <parameterMap type="java.util.Map" id="getUserCountMap">
    13         <parameter property="sexid" mode="IN" jdbcType="INTEGER"/>
    14         <parameter property="usercount" mode="OUT" jdbcType="INTEGER"/>
    15     </parameterMap>
    复制代码

    四、编写单元测试代码

    复制代码
     1 package me.gacl.test;
     2 
     3 import java.util.HashMap;
     4 import java.util.List;
     5 import java.util.Map;
     6 
     7 import me.gacl.custom.model.ConditionUser;
     8 import me.gacl.domain.User;
     9 import me.gacl.util.MyBatisUtil;
    10 import org.apache.ibatis.session.SqlSession;
    11 import org.junit.Test;
    12 
    13 /**
    14  * @author gacl
    15  * 测试调用存储过程
    16  */
    17 public class Test6 {
    18     
    19     @Test
    20     public void testGetUserCount(){
    21         SqlSession sqlSession = MyBatisUtil.getSqlSession();
    22         /**
    23          * 映射sql的标识字符串,
    24          * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
    25          * getUserCount是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
    26          */
    27         String statement = "me.gacl.mapping.userMapper.getUserCount";//映射sql的标识字符串
    28         Map<String, Integer> parameterMap = new HashMap<String, Integer>();
    29         parameterMap.put("sexid", 1);
    30         parameterMap.put("usercount", -1);
    31         sqlSession.selectOne(statement, parameterMap);
    32         Integer result = parameterMap.get("usercount");
    33         System.out.println(result);
    34         sqlSession.close();
    35     }
    36 }
    复制代码
    我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他 们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其 实我是一个程序员
  • 相关阅读:
    jquery中ajax请求的使用和四个步骤示例
    jzoj6094
    2019.03.27【GDOI2019】模拟 T3
    AGC019F
    浅谈高维前缀和
    刷题清单
    为什么要遍历两次?——个人对于kosaraju算法的理解
    我的黑客和渗透测试学习路线
    一个假猪套神器:NET CAT-NC
    kali linux(二):使用与介绍
  • 原文地址:https://www.cnblogs.com/kms1989/p/5534085.html
Copyright © 2020-2023  润新知