zoukankan      html  css  js  c++  java
  • MyBatis学习总结(六)——调用存储过程

    一、提出需求

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

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

    create table p_user(  
        id int primary key auto_increment,  
        name varchar(10),
        sex char(2)
    ); 
    
    insert into p_user(name,sex) values('A',"男");  
    insert into p_user(name,sex) values('B',"女");  
    insert into p_user(name,sex) values('C',"男");  
    
    -- 创建存储过程(查询得到男性或女性的数量, 如果传入的是0就女性否则是男性)
    DELIMITER $
    CREATE PROCEDURE mybatis.ges_user_count(IN sex_id INT, OUT user_count INT)
    BEGIN  
    IF sex_id=0 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 
    $
    
    -- 调用存储过程
    DELIMITER ;
    SET @user_count = 0;
    CALL mybatis.ges_user_count(1, @user_count);
    SELECT @user_count;
    

    三、编辑userMapper.xml

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

    <!-- 
            查询得到男性或女性的数量, 如果传入的是0就女性否则是男性
         -->
        <select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE">
            CALL mybatis.ges_user_count(?,?)
        </select>
        
        <!--
            parameterMap.put("sexid", 0);
            parameterMap.put("usercount", -1);
         -->
        <parameterMap type="java.util.Map" id="getUserCountMap">
            <parameter property="sexid" mode="IN" jdbcType="INTEGER"/>
            <parameter property="usercount" mode="OUT" jdbcType="INTEGER"/>
        </parameterMap>
    

     四、编写单元测试代码

    package me.gacl.test;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import me.gacl.custom.model.ConditionUser;
    import me.gacl.domain.User;
    import me.gacl.util.MyBatisUtil;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    /**
     * @author gacl
     * 测试调用存储过程
     */
    public class Test6 {
        
        @Test
        public void testGetUserCount(){
            SqlSession sqlSession = MyBatisUtil.getSqlSession();
            /**
             * 映射sql的标识字符串,
             * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
             * getUserCount是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
             */
            String statement = "me.gacl.mapping.userMapper.getUserCount";//映射sql的标识字符串
            Map<String, Integer> parameterMap = new HashMap<String, Integer>();
            parameterMap.put("sexid", 1);
            parameterMap.put("usercount", -1);
            sqlSession.selectOne(statement, parameterMap);
            Integer result = parameterMap.get("usercount");
            System.out.println(result);
            sqlSession.close();
        }
    }
    
  • 相关阅读:
    linux下动态链接库.so文件 静态链接库.a文件创建及使用
    matlab 自动阈值白平衡算法 程序可编译实现
    C++ 迭代器介绍 [转摘]
    C++ Primer 第三章 标准库类型vector+迭代器iterator 运算
    matlab灰度变彩色+白平衡算法实现
    我和奇葩的故事之失联第七天
    C++ Primer 第三章 标准库类型string运算
    OpenCV白平衡算法之灰度世界法(消除RGB受光照影响)
    查看网络情况netstat指令与动态监控top指令
    linux服务
  • 原文地址:https://www.cnblogs.com/MaxElephant/p/8117728.html
Copyright © 2011-2022 走看看