1. 程式人生 > >Mybatis之基於XML的調用存儲過程

Mybatis之基於XML的調用存儲過程

count put state pri parameter 創建 oca 基於 XML

一、返回單個值

1、存儲過程準備

這裏先創建一個存儲過程,傳入參數為age,傳出參數為count。然後先測試一下是否正確。

技術分享圖片
CREATE DEFINER=`root`@`localhost` PROCEDURE `pro_get_usercountbyage`(in age int,out user_count int)
BEGIN
 select count(1) into user_count from user a where a.age=age;
END
View Code 技術分享圖片
DELIMITER ;
SET @user_count = 0;
CALL mybatis.pro_get_usercountbyage(
27, @user_count); SELECT @user_count;
View Code

2、XML配置

這裏配置傳入參數的映射parameterMap,statementType,在parameterMap中設置參數的方向。

技術分享圖片
    <select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE">
        CALL pro_get_usercountbyage(?,?)
    </select>
    <parameterMap type="java.util.Map"
id="getUserCountMap"> <parameter property="age" mode="IN" jdbcType="INTEGER"/> <parameter property="usercount" mode="OUT" jdbcType="INTEGER"/> </parameterMap>
View Code

3、測試

這裏傳入參數age=27,然後獲取返回的結果值。

技術分享圖片
        String statement="Cuiyw.MyBatis.DBMapping.UserMapper.getUserCount";
        Map
<String,Integer > map=new HashMap<String,Integer>(); map.put("age", 27); session.selectOne(statement, map); int result = map.get("usercount"); System.out.println(result);
View Code

二、返回列表

1.返回列表的和返回多個值的基本沒太大區別,只是有一個地方需要註意,就是在存儲過程select的列名要和resultMap的一致,我就踩到坑了在這個地方。存儲過程還是在上面存儲過程上改的。返回table。

技術分享圖片
DELIMITER ;

CALL mybatis.pro_get_usercountbyage(27);
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pro_get_usercountbyage`(in age int)
BEGIN
 select *  from user a where a.age=age;
END$$
DELIMITER ;
View Code

2.xml配置

這個只是增加了resultMap

技術分享圖片
    <select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE" resultMap="userResult">
        CALL pro_get_usercountbyage(?)
    </select>
    <parameterMap type="java.util.Map" id="getUserCountMap">
        <parameter property="age" mode="IN" jdbcType="INTEGER"/>
    </parameterMap>
View Code

3.測試

技術分享圖片
        String statement="Cuiyw.MyBatis.DBMapping.UserMapper.getUserCount";
        Map<String,Integer > map=new HashMap<String,Integer>();  
        map.put("age", 27);  
        List<User>users= session.selectList(statement, map);
        for(int i=0;i<users.size();i++)
        {
            System.out.println(users.get(i).toString());
        }
View Code

技術分享圖片

Mybatis之基於XML的調用存儲過程