Mybatis框架学习总结-调用存储过程

设计需求

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

准备数据库表和存储过程

1.准备person表:

CREATE TABLE person(
 id INT PRIMARY KEY AUTO_INCREMENT,
 NAME VARCHAR(10),
 sex CHAR(2)
);

INSERT INTO person(NAME,sex) VALUES('A',"m");
INSERT INTO person(NAME,sex) VALUES('B',"f");
INSERT INTO person(NAME,sex) VALUES('C',"m");

查看person表的内容:

创建存储过程:

创建存储过程,查询得到男性或女性的数量,如果传入的是0就是女性,否则就是男性

DELIMITER $
 CREATE PROCEDURE mybatis.ges_person_count(IN sex_id INT ,OUT person_count INT)
 BEGIN
 IF sex_id=0 THEN
 SELECT COUNT(*) FROM mybatis.`person` WHERE person.`sex`='f' INTO person_count;
 ELSE
 SELECT COUNT(*) FROM mybatis.`person` WHERE person.`sex`='m' INTO person_count;
 END IF;
 END
$

 

调用存储过程

DELIMITER ;
SET @person_count=0;
CALL mybatis.`ges_person_count`(1,@person_count);
SELECT @person_count;

2.编辑userMapper.xml,你也可以在别的xml中配置,这个随意

<!-- 调用存储过程得到男性或女性的数量,如果传入的是0,就女性,否则是男性 -->
    <select id="getPersonCount" parameterMap="getPersonCountMap" statementType="CALLABLE">
        CALL mybatis.`ges_person_count`(?,?);
    </select>
    
    <!-- parameterMap.put("sexid",0)
         parameterMap.put("usercount,-1);
     -->
     <parameterMap type="java.util.Map" id="getPersonCountMap">
         <parameter property="sexid" mode="IN" jdbcType="INTEGER"/>
         <parameter property="personcount" mode="OUT" jdbcType="INTEGER"/>
     </parameterMap>

3.编写单元测试代码:

Reader reader = Resources.getResourceAsReader(resource);
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        String statement = "com.fpc.Mapping.userMapper.getPersonCount";
        SqlSession session = sessionFactory.openSession();
        Map<String,Integer> parameterMap = new HashMap<>();
        parameterMap.put("sexid", 0);
        parameterMap.put("personcount", -1);
        session.selectOne(statement,parameterMap);
        int count = parameterMap.get("personcount");
        String profile = "";
        if ( parameterMap.get("sexid") == 0 ) {
            profile += "女生的数量为:";
        } else {
            profile += "男生的树数量为:";
        }
        System.out.println( profile + count);

执行结果:

posted @ 2017-11-16 13:37  起床oO  阅读(4752)  评论(0编辑  收藏  举报