码迷,mamicode.com
首页 > 其他好文 > 详细

Mybatis之基于XML的调用存储过程

时间:2018-01-29 21:28:10      阅读:2362      评论:0      收藏:0      [点我收藏+]

标签:splay   图片   limit   mapper   info   none   cal   use   resultmap   

一、返回单个值

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的调用存储过程

标签:splay   图片   limit   mapper   info   none   cal   use   resultmap   

原文地址:https://www.cnblogs.com/5ishare/p/8379217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!