設計需求
查詢數據庫,查詢得到男性或女性的數量,如果傳入的參數是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);
執行結果: