• 六: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();
        }
    }
  • 相关阅读:
    批量修改数据库表前缀
    form表单reset重置按钮
    thinkphp禁止模版标签解析
    form 转json,将form表单中的数据序列化数组后转换为Json
    MIME对应表
    zend studio 12汉化和破解
    hadoop一键安装伪分布式
    简明shell入门
    java中readLine()方法为什么有的行读不到?
    using 40 logical processors based on SQL Server licensing SqlServer CPU核心数限制问题
  • 原文地址:https://www.cnblogs.com/chedahui/p/10029434.html
Copyright © 2020-2023  润新知