设计需求
查询数据库,查询得到男性或女性的数量,如果传入的参数是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);
执行结果: