滚雪球学MyBatis-Plus(08):条件构造器

前言

在上期内容中,我们详细介绍了如何配置和实现 MyBatis Plus 的分页与排序功能。通过这些功能,我们可以高效地处理大量数据并进行灵活的排序查询,显著提高数据查询的效率和用户体验。

本期内容将继续深入,重点介绍 MyBatis Plus 的条件构造器。条件构造器是 MyBatis Plus 提供的一种灵活构建 SQL 查询条件的工具,使得复杂查询的编写变得更加简洁和高效。通过本期内容,你将学会如何使用条件构造器构建各种复杂的查询条件,并在项目中应用这些技巧。

一、条件构造器简介

MyBatis Plus 的条件构造器主要有 QueryWrapperLambdaQueryWrapper 两种,分别用于普通方式和 Lambda 表达式方式构建查询条件。使用条件构造器可以简化 SQL 语句的编写,并提高代码的可读性和维护性。

二、使用 QueryWrapper 构建查询条件

QueryWrapper 是 MyBatis Plus 提供的条件构造器之一,支持链式调用来构建查询条件。

  1. 基础使用

    • UserMapperTest 中编写测试方法,演示 QueryWrapper 的基本用法:
      @Test
      public void testQueryWrapper() {
          QueryWrapper<User> queryWrapper = new QueryWrapper<>();
          queryWrapper.eq("name", "John Doe").ge("age", 25);
          List<User> users = userMapper.selectList(queryWrapper);
          assert users.size() > 0;
      }
      
  2. 常见查询操作

    • 相等查询:queryWrapper.eq("column", value)
    • 大于等于:queryWrapper.ge("column", value)
    • 小于等于:queryWrapper.le("column", value)
    • 模糊查询:queryWrapper.like("column", value)
三、使用 LambdaQueryWrapper 构建查询条件

LambdaQueryWrapperQueryWrapper 的一种增强形式,使用 Lambda 表达式来构建查询条件,避免了字段名的硬编码问题,提高了代码的安全性。

  1. 基础使用

    • UserMapperTest 中编写测试方法,演示 LambdaQueryWrapper 的基本用法:
      @Test
      public void testLambdaQueryWrapper() {
          LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
          lambdaQueryWrapper.eq(User::getName, "John Doe").ge(User::getAge, 25);
          List<User> users = userMapper.selectList(lambdaQueryWrapper);
          assert users.size() > 0;
      }
      
  2. 常见查询操作

    • 相等查询:lambdaQueryWrapper.eq(User::getColumn, value)
    • 大于等于:lambdaQueryWrapper.ge(User::getColumn, value)
    • 小于等于:lambdaQueryWrapper.le(User::getColumn, value)
    • 模糊查询:lambdaQueryWrapper.like(User::getColumn, value)
四、复杂查询示例

通过 QueryWrapperLambdaQueryWrapper,我们可以构建更复杂的查询条件。

  1. 多条件组合查询

    • UserMapperTest 中编写测试方法,演示多条件组合查询:
      @Test
      public void testComplexQuery() {
          LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
          lambdaQueryWrapper.eq(User::getName, "John Doe")
                           .or(wrapper -> wrapper.ge(User::getAge, 25).le(User::getAge, 30))
                           .like(User::getEmail, "example.com");
          List<User> users = userMapper.selectList(lambdaQueryWrapper);
          assert users.size() > 0;
      }
      
  2. 条件构造器与分页结合

    • UserMapperTest 中编写测试方法,演示条件构造器与分页功能的结合使用:
      @Test
      public void testQueryWithPagination() {
          LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
          lambdaQueryWrapper.like(User::getName, "Doe");
          Page<User> page = new Page<>(1, 5);
          IPage<User> userPage = userMapper.selectPage(page, lambdaQueryWrapper);
          assert userPage.getRecords().size() > 0;
      }
      
五、在服务层和控制层中的应用

条件构造器不仅可以在测试类中使用,还可以在服务层和控制层中应用,以实现灵活的查询逻辑。

  1. UserService 中使用条件构造器

    • UserService 接口中定义方法:

      IPage<User> findUsersWithConditions(Page<User> page, LambdaQueryWrapper<User> wrapper);
      
    • UserServiceImpl 类中实现方法:

      @Override
      public IPage<User> findUsersWithConditions(Page<User> page, LambdaQueryWrapper<User> wrapper) {
          return baseMapper.selectPage(page, wrapper);
      }
      
  2. UserController 中使用条件构造器

    • UserController 类中编写接口,接收查询条件并调用服务层方法:
      @GetMapping("/search")
      public IPage<User> searchUsers(@RequestParam int pageNo, @RequestParam int pageSize, @RequestParam String name, @RequestParam int minAge, @RequestParam int maxAge) {
          Page<User> page = new Page<>(pageNo, pageSize);
          LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
          wrapper.like(User::getName, name).ge(User::getAge, minAge).le(User::getAge, maxAge);
          return userService.findUsersWithConditions(page, wrapper);
      }
      
六、总结

通过本篇文章,你已经学会了如何使用 MyBatis Plus 的条件构造器来构建各种复杂的查询条件,并在项目中应用这些技巧。我们详细介绍了 QueryWrapperLambdaQueryWrapper 的基本用法,以及如何在服务层和控制层中使用条件构造器。这些知识点将帮助你编写更加灵活和高效的查询逻辑。

下期预告

在下一期内容中,我们将深入探讨 MyBatis Plus 的乐观锁与性能优化技术。乐观锁可以帮助我们在并发环境下保持数据一致性,而性能优化技术则能够显著提高应用程序的运行效率。我们将详细介绍这些技术的实现方法,并通过实例演示如何在项目中应用这些优化技巧。敬请期待!

通过本系列教程的学习,你将系统地掌握 MyBatis Plus 的各项功能,从基础到高级,从理论到实践,全面提升你的开发技能。希望你在学习过程中能够有所收获,并应用到实际项目中。让我们继续这段学习之旅吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug菌¹

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值