Mybatis学习笔记-mybatis调用存储过程

来源:互联网 发布:win10 ubuntu双系统 编辑:程序博客网 时间:2024/05/17 08:26

本文记录的是Mybatis调用Mysql存储过程的案例,学习源码已经上传至GitHub,有兴趣的童鞋可以下载,相互学习。

功能需求

项目过程中,对于性别这些数据,数据库存的是一般是对应代码,前台显示的汉字描述,查询的时候就会出现,查询男性或女性的数量,如果传入的是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 THENSELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='女' INTO user_count;ELSESELECT 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;

数据准备

创建对应的实体表

public class User {    private String id;    private String name;    private String sex;    //省略set get ToString()等方法。}

配置Mappler映射文件

<!-- 测试调用存储过程 --><select id="getUserCount" statementType="CALLABLE" parameterMap="getCount">    call mybatis.ges_user_count(?,?)</select><parameterMap type="java.util.Map" id="getCountMap">    <parameter property="sex_id" mode="IN" javaType="INTEGER" />    <parameter property="user_count" mode="OUT" jdbcType="INTEGER" /></parameterMap>

测试以及测试结果

@Testpublic void testGetUserSexCount() {    // 注意此处默认不是自动提交事务的    SqlSession session = MybatisUtils.getFactory().openSession(true);// 创建自动提交事物的Session对象    String sql = "mapper.userMapper.getUserCount";    Map<String, Integer> paramMap = new HashMap<>();    paramMap.put("sex_id", 2);    session.selectOne(sql, paramMap);    Integer userCount = paramMap.get("user_count");    logger.info("满足条件的人数:" + userCount);}

这里写图片描述