前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot(13):解锁Mybatis-Plus条件构造器的全新玩法,Spring Boot开发再也不用愁!

Spring Boot(13):解锁Mybatis-Plus条件构造器的全新玩法,Spring Boot开发再也不用愁!

作者头像
bug菌
发布2023-09-14 08:25:32
4520
发布2023-09-14 08:25:32
举报
文章被收录于专栏:《项目实战教学》

环境说明: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中添加以下代码:

代码语言:javascript
复制
<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方法用于等于查询,例如:

代码语言:javascript
复制
    @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方法用于不等于查询,例如:

代码语言:javascript
复制
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ne("age", 18);

上述代码表示查询年龄不为18的用户。

4.2.3 gt方法

gt方法用于大于查询,例如:

代码语言:javascript
复制
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 18);

上述代码表示查询年龄大于18的用户。

4.2.4 ge方法

ge方法用于大于等于查询,例如:

代码语言:javascript
复制
    @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方法用于小于查询,例如:

代码语言:javascript
复制
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lt("age", 18);

上述代码表示查询年龄小于18的用户。

4.2.6 le方法

le方法用于小于等于查询,例如:

代码语言:javascript
复制
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.le("age", 18);

上述代码表示查询年龄小于等于18的用户。

4.2.7 between方法

between方法用于范围查询,例如:

代码语言:javascript
复制
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 18, 30);

上述代码表示查询年龄在18到30之间的用户。

4.2.8 like方法

like方法用于模糊查询,例如:

代码语言:javascript
复制
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "张");

上述代码表示查询名字中包含“张”的用户。

4.2.9 notLike方法

notLike方法用于不包含查询,例如:

代码语言:javascript
复制
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notLike("name", "张");

上述代码表示查询名字中不包含“张”的用户。

4.2.10 in方法

in方法用于in查询,例如:

代码语言:javascript
复制
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查询,例如:

代码语言:javascript
复制
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的数据,例如:

代码语言:javascript
复制
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNull("name");

上述代码表示查询名字为null的用户。

4.2.13 isNotNull方法

isNotNull方法用于查询不为null的数据,例如:

代码语言:javascript
复制
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNotNull("name");

上述代码表示查询名字不为null的用户。

4.3 Lambda表达式

Lambda表达式是Java 8中的一项新特性,在MyBatis-Plus中也支持Lambda表达式查询,例如:

代码语言:javascript
复制
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getAge, 18);

上述代码与上文的eq方法功能相同,但是使用了Lambda表达式。除了eq方法,其他方法也都支持Lambda表达式。

4.4 条件构造器链式拼接

条件构造器支持链式拼接,可以使用and、or方法来实现,例如:

代码语言:javascript
复制
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三").or().eq("name", "李四");

上述代码表示查询名字为“张三”或者“李四”的用户。

4.5 测试用例

为了验证以上方法的正确性,我们可以编写以下测试用例:

代码语言:javascript
复制
@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中条件构造器的使用方法,以及如何通过条件构造器来实现复杂的查询条件。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前言
  • 2. 摘要
  • 3. 简介
  • 4. 正文
    • 4.1 依赖导入
      • 4.2 条件构造器常用方法
        • 4.2.1 eq方法
        • 4.2.2 ne方法
        • 4.2.3 gt方法
        • 4.2.4 ge方法
        • 4.2.5 lt方法
        • 4.2.6 le方法
        • 4.2.7 between方法
        • 4.2.8 like方法
        • 4.2.9 notLike方法
        • 4.2.10 in方法
        • 4.2.11 notIn方法
        • 4.2.12 isNull方法
        • 4.2.13 isNotNull方法
      • 4.3 Lambda表达式
        • 4.4 条件构造器链式拼接
          • 4.5 测试用例
          • 5. 小结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档