MyBatis中使用in()条件查询的方法详解

在关系型数据库中,IN条件查询是一种常见的查询方式,它允许我们在SQL语句中指定一个值列表,并返回匹配这些值的记录。MyBatis作为一款优秀的持久层框架,提供了灵活且高效的API来实现IN条件查询。通过使用MyBatis的动态SQL和参数映射功能,我们可以轻松地构建复杂的查询语句,满足各种业务需求。本文将详细介绍如何在MyBatis中使用IN条件查询,帮助读者掌握这一关键技术。

这篇文章我会演示几种mybatis中使用in查询的方式。

1 数组、字符串

2 集合

3 使用Myabtis-plus框架的条件构造器来实现

我们在mysql中使用in查询的方式是这样的

图片[1]-MyBatis中使用in()条件查询的方法详解-趣考网

那在mybatis中我们使用标签来实现包含查询

1 使用数组方式

Mapper:

图片[2]-MyBatis中使用in()条件查询的方法详解-趣考网

Mapper.xml:

select*fromstudentwhereidin#{item}

:foreach中的 collection标签中为array,item是遍历ids中的每个元素,默认为item可以自定义。

测试类:

图片[3]-MyBatis中使用in()条件查询的方法详解-趣考网

我们可以使用字符串来接收参数,使用逗号分隔每个参数,然后把分隔后的参数放到集合中。

图片[4]-MyBatis中使用in()条件查询的方法详解-趣考网

2 使用List集合的方式

Mapper:

图片[5]-MyBatis中使用in()条件查询的方法详解-趣考网

Mapper.xml

select*fromstudentwhereidin#{item}

使用list方式collection的value必须为list

测试:

图片[6]-MyBatis中使用in()条件查询的方法详解-趣考网

3 第三种我们使用Mybatis-plus框架的条件构造器来进行查询

@TestvoidTest(){QueryWrapperqw=newQueryWrapper();qw.in(\"id\",7,9);Liststudents=studentMapper.selectList(qw);System.out.println(students.toString());}

测试结果:

[Student(id=7, name=蔡徐坤, age=18), Student(id=9, name=金科徐, age=18)]

附:Mybatis-plus的条件构造器详细使用教程

常用函数:

函数说明

例子(以下为where后的条件,select * from user where ?)

eq等于=eq(\"name\",\"张三\") --> name = \'张三\'
ne不等于 !=ne(\"name\",\"李四\") --> name != \'李四\'
gt大于 >gt(age,18) --> age > 18 //年龄大于18岁
ge大于等于 >=ge(age,18) --> age >=18
lt小于 <lt(age,20) --> age < 20 //年龄小于20岁
le小于等于 <=le(age,20) ---> age <= 20
betweenbetween 值1 and 值2between(age,15,25) ---> 匹配15岁到25岁之间(包含15和25)
nobetweennotbetween 值1 and 值2notBetween(age,35,45)-->匹配不包含35-45之间的(包含35和45)
likelike \'%值%\'

like(\"name\",\"张\") --> like \'%张%\'

notlikenot like \'%值%\'notLike(\"name”,\"张\") --> not like \'%张%\'
likeLeftlike \'%值\'likeLeft(\"name\",\"王\") ---> like \"%王\"
likeRightlike \'值%\'likeRight(\"name\",\"王\") ---> like \"王%\"
isNull表字段 is NULLisNull(\"name\") ---> name is null
notNull表字段 is not NULLisNull(\"name\") ---> name is not null
in表字段in(v1,v2,v3...)in(\"num\",{1,2,3}) ---> num in (1,2,3)
notIn表字段 not in(v1.v2,v3)notIn(\"num\",{2,3,4}) ---> num not in (2,3,4)

使用构造器完成一个简单的查询

//SQL语句:select*fromuserwhereid=?//使用条件构造器QueryWrapper@TestvoidqueryWrapper(){QueryWrapperqw=newQueryWrapper();qw.eq(\"id\",1);Listusers=userMapper.selectList(qw);users.forEach(System.out::print);}

那么再来一点更多条件的

//我们要查询name里姓氏包含‘张\',并且年龄小于30岁的//SQL语句:select*fromuserwherenamelike\'张%\'andage<30//条件构造器:@TestvoidqueryWrapper(){QueryWrapperqw=newQueryWrapper();qw.likeRight(\"name\",\"张\").lt(\"age\",\"30\");Listusers=userMapper.selectList(qw);users.forEach(System.out::println);}
//查询出年龄在15-25之间,并且他的名字不为空//SQL语句:select*fromuserwherenameisnotnullandagebetween(15,25)//条件构造器@TestvoidqueryWrapper(){QueryWrapperqw=newQueryWrapper();qw.isNotNull(\"name\").between(\"age\",18,25);Listusers=userMapper.selectList(qw);users.forEach(System.out::println);}
//查询名字中带有王的,并且年龄不小于30,邮箱为空的//SQL语句:select*fromuserwherenamelike\'%王%\'andage>=30andemailisnull//条件构造器:@TestvoidqueryWrapper(){QueryWrapperqw=newQueryWrapper();qw.like(\"name\",\"王\").ge(\"age\",30).isNull(\"email\");Listusers=userMapper.selectList(qw);users.forEach(System.out::println);}

总结

通过本文的介绍,我们掌握了如何在MyBatis中使用IN条件查询。通过动态SQL和参数映射功能,我们可以灵活地构建包含IN条件的查询语句,并高效地执行数据库查询操作。无论是在简单的单表查询还是复杂的多表联查中,IN条件查询都是一种非常实用的技术。希望本文的内容能够帮助大家更好地理解和应用MyBatis,提升数据库操作的效率和灵活性。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享