🏆本文收录于《Spring Boot从入门到精通》,专门攻坚指数提升,2023 年国内最系统+最强(更新中)。
本专栏致力打造最硬核Spring Boot 系列教程,从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
1. 前言
MyBatis-Plus是一个非常流行的MyBatis增强工具,它可以简化MyBatis的使用,并且在MyBatis的基础上新增了很多功能。本文将介绍MyBatis-Plus中条件构造器的使用手册,包括基本方法、Lambda表达式、条件构造器链式拼接等等,希望对广大开发者有所帮助。
2. 摘要
MyBatis-Plus中的条件构造器主要用于构建SQL查询条件,它提供了多种构造器,可以通过链式调用来实现复杂的查询条件。本文将详细介绍MyBatis-Plus中条件构造器的使用方法,包括基本方法、Lambda表达式、条件构造器链式拼接等等。
3. 简介
Mybatis-Plus是基于Mybatis的一款优秀开源持久层框架,可以在不编写XML的情况下,实现Mybatis的所有功能,并且提供了一些增强功能,例如条件构造器、分页插件等。条件构造器可以灵活地构造查询条件,实现复杂的查询操作。
4. 正文
4.1 依赖导入
使用Mybatis-Plus之前需要在项目中导入相应的依赖。在pom.xml中添加以下代码:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
示例如下:
4.2 条件构造器常用方法
Mybatis-Plus提供了多种查询条件构造方法,常用的有eq,ne,gt,ge,lt,le,like,in等。例如:
4.2.1 eq方法
eq方法用于等于查询,例如:
@Override
public List<UserEntity> getUsersBySex(String sex) {
//条件构造器
QueryWrapper<UserEntity> wrapper = new QueryWrapper<>();
//eq 代表“ = ”;例如 eq(sex, 男) ---> sex = '男';等同于拼接在sql语句后边的where条件。
wrapper.eq(sex, sex);
//将条件带入返回
List<UserEntity> list = this.list(wrapper);
//返回数据
// wrapper.ge(age,11); =>age>=11
return list;
}
示例截图如下:
上述代码表示查询年龄为18的用户。
4.2.2 ne方法
ne方法用于不等于查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ne(age, 18);
上述代码表示查询年龄不为18的用户。
4.2.3 gt方法
gt方法用于大于查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt(age, 18);
上述代码表示查询年龄大于18的用户。
4.2.4 ge方法
ge方法用于大于等于查询,例如:
@Override
public UserEntity getUserById(String id) {
LambdaQueryWrapper<UserEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserEntity::getId, id);
wrapper.ge(UserEntity::getAge, 11);
return this.getOne(wrapper);
}
示例截图如下:
上述代码表示查询年龄大于等于18的用户。
4.2.5 lt方法
lt方法用于小于查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lt(age, 18);
上述代码表示查询年龄小于18的用户。
4.2.6 le方法
le方法用于小于等于查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.le(age, 18);
上述代码表示查询年龄小于等于18的用户。
4.2.7 between方法
between方法用于范围查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between(age, 18, 30);
上述代码表示查询年龄在18到30之间的用户。
4.2.8 like方法
like方法用于模糊查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like(name, 张);
上述代码表示查询名字中包含“张”的用户。
4.2.9 notLike方法
notLike方法用于不包含查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notLike(name, 张);
上述代码表示查询名字中不包含“张”的用户。
4.2.10 in方法
in方法用于in查询,例如:
List<Integer> ageList = new ArrayList<>();
ageList.add(18);
ageList.add(20);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.in(age, ageList);
上述代码表示查询年龄为18或20的用户。
4.2.11 notIn方法
notIn方法用于not in查询,例如:
List<Integer> ageList = new ArrayList<>();
ageList.add(18);
ageList.add(20);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notIn(age, ageList);
上述代码表示查询年龄不为18或20的用户。
4.2.12 isNull方法
isNull方法用于查询为null的数据,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNull(name);
上述代码表示查询名字为null的用户。
4.2.13 isNotNull方法
isNotNull方法用于查询不为null的数据,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNotNull(name);
上述代码表示查询名字不为null的用户。
4.3 Lambda表达式
Lambda表达式是Java 8中的一项新特性,在MyBatis-Plus中也支持Lambda表达式查询,例如:
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getAge, 18);
上述代码与上文的eq方法功能相同,但是使用了Lambda表达式。除了eq方法,其他方法也都支持Lambda表达式。
4.4 条件构造器链式拼接
条件构造器支持链式拼接,可以使用and、or方法来实现,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(name, 张三).or().eq(name, 李四);
上述代码表示查询名字为“张三”或者“李四”的用户。
4.5 测试用例
为了验证以上方法的正确性,我们可以编写以下测试用例:
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void test1() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(age, 18);
List<User> userList = userMapper.selectList(queryWrapper);
Assert.assertEquals(userList.size(), 2);
}
@Test
public void test2() {
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getAge, 18);
List<User> userList = userMapper.selectList(lambdaQueryWrapper);
Assert.assertEquals(userList.size(), 2);
}
@Test
public void test3() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(name, 张三).or().eq(name, 李四);
List<User> userList = userMapper.selectList(queryWrapper);
Assert.assertEquals(userList.size(), 2);
}
}
上述测试用例分别测试了eq方法、Lambda表达式、条件构造器链式拼接的正确性。
5. 小结
本文介绍了MyBatis-Plus中条件构造器的使用方法,包括基本方法、Lambda表达式、条件构造器链式拼接等等。通过本文的介绍,相信读者已经可以掌握MyBatis-Plus中条件构造器的使用方法,以及如何通过条件构造器来实现复杂的查询条件。
关于我
👨🎓作者:bug菌
✏️博客:CSDN、掘金、infoQ、51CTO等
🎉简介:CSDN|阿里云|华为云|51CTO等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金 | InfoQ | 51CTO等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料.