mybatis调用存储过程,带in、out参数问题

 更新时间:2024年01月27日 10:20:50   作者:猎人在吃肉  
这篇文章主要介绍了mybatis调用存储过程,带in、out参数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1、需求

统计男性、女性的数量,如果传入的是0,就统计女性的数量,否则统计男性的数量。

2、准备数据库表、存储过程

2.1、创建表,导入数据

create table p_user(  
	id int primary key auto_increment,  
	name varchar(10),
	sex char(2)
) engine=innodb default charset=utf8 ; 

insert into p_user(name,sex) values('A',"男");  
insert into p_user(name,sex) values('B',"女");  
insert into p_user(name,sex) values('C',"男");  

2.2、创建存储过程

delimiter $
drop procedure if exists get_user_count;

create procedure get_user_count(in sex_id int, out user_count int)
begin  
	if sex_id=0 then
		select count(*) from p_user where p_user.sex='女' into user_count;
	else
		select count(*) from p_user where p_user.sex='男' into user_count;
	end if;
end $
delimiter ;

2.3、测试存储过程

call get_user_count(1, @user_count);  ## 0:统计女性的,1:统计男性的
select @user_count;

结果:

3、 Mapper 接口

package com.test;

public interface  UserMapper{
	public Integer getCount(Map map);
}

4、UserMapper.xml

统计男性、女性的数量, 如果传入的是0,就统计女性的数量,否则统计男性。

<mapper namespace="com.test.UserMapper">
	<!-- 
		统计男性、女性的数量, 如果传入的是0,就统计女性的数量,否则统计男性
		call get_user_count(1, @user_count);
	 -->
	 <select id="getCount" statementType="CALLABLE" parameterMap="getCountMap">
	 	call get_user_count(?,?)
	 </select>
    
	 <parameterMap type="java.util.Map" id="getCountMap">
	 	<parameter property="sex_id" mode="IN" jdbcType="INTEGER"/>
	 	<parameter property="user_count" mode="OUT" jdbcType="INTEGER"/>
	 </parameterMap>
</mapper>

5、 测试调用

public class UserTest {

	public static void main(String[] args) throws IOException {
		
		Reader reader = Resources.getResourceAsReader("conf.xml");		
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);		
		SqlSession  session = sessionFactory.openSession();
		
		Map<String, Integer> paramMap = new HashMap<>();
        paramMap.put("sex_id", 0);

        session.selectOne(statement, paramMap);

        Integer userCount = paramMap.get("user_count");
        System.out.println(userCount);
	}
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java面向对象基础知识之枚举

    Java面向对象基础知识之枚举

    这篇文章主要介绍了Java面向对象的之枚举,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-11-11
  • Spring Boot 集成MyBatis 教程详解

    Spring Boot 集成MyBatis 教程详解

    这篇文章主要介绍了Spring Boot 集成MyBatis 教程详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-04-04
  • Springboot @Value使用代码实例

    Springboot @Value使用代码实例

    这篇文章主要介绍了Springboot @Value使用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • centos7安装jdk-8u333详细图文教程

    centos7安装jdk-8u333详细图文教程

    很多集成环境并不包含jdk环境,即使有相应的组件,在使用时也无法很好的使用,调试过程中也会遇到各种各样的问题,所以很多情况下还是建议在服务器内手动部署,下面这篇文章主要给大家介绍了关于centos7安装jdk-8u333的相关资料,需要的朋友可以参考下
    2023-05-05
  • IntelliJ IDEA2023中运行Spring Boot找不到VM options进行端口的修改的问题解决

    IntelliJ IDEA2023中运行Spring Boot找不到VM options进

    这篇文章主要介绍了IntelliJ IDEA2023中运行Spring Boot找不到VM options进行端口的修改的问题解决,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Java Lambda表达式之从集合到流

    Java Lambda表达式之从集合到流

    这篇文章主要介绍了Java Lambda表达式之从集合到流知识,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • JAVA Static关键字的用法

    JAVA Static关键字的用法

    这篇文章主要介绍了JAVA Static关键字的用法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Spring Security配置多个数据源并添加登录验证码的实例代码

    Spring Security配置多个数据源并添加登录验证码的实例代码

    这篇文章主要介绍了Spring Security配置多个数据源并添加登录验证码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • spring框架下@value注解属性static无法获取值问题

    spring框架下@value注解属性static无法获取值问题

    这篇文章主要介绍了spring框架下@value注解属性static无法获取值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • java中timer的schedule和scheduleAtFixedRate方法区别详解

    java中timer的schedule和scheduleAtFixedRate方法区别详解

    这篇文章主要为大家详细介绍了java中timer的schedule和scheduleAtFixedRate方法区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12

最新评论