1. 程式人生 > >MyBatis——呼叫儲存過程

MyBatis——呼叫儲存過程

原文:http://www.cnblogs.com/xdp-gacl/p/4270352.html

一、提出需求

查詢得到男性或女性的數量, 如果傳入的是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();
    }
}
複製程式碼