引言
MyBatis-Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上提供了更便捷的使用方式和更丰富的功能。其中,条件构造器是 MyBatis-Plus 中一个非常实用的功能,它可以帮助我们动态构建 SQL 查询条件,避免手动拼接 SQL 语句,提高了开发效率。
条件构造器关系
条件构造器各个类之间的关系如上图所示,其中绿色类为抽象类,蓝色类为其子类,可以创建new对象。
条件构造器的使用
在mybatis的使用中,我们常常需要手写大量SQL语句,耗费了太多时间,而mybatis-plus的发明正是帮助我们在开发过程中减少SQL语句的书写,其中经常出现的参数wrapper正是条件构造器,条件构造器就相当于SQL语句中的条件where部分,如QueryWrapper和 UpdateWrapper,就分别是用于生成查和改 的 sql 的 where 条件。
条件构造器使用步骤
1.导入相关依赖 在项目中引入 MyBatis-Plus 相关的依赖,在 Maven 项目中可以在 pom.xml 文件中添加如下依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>{version}</version>
</dependency>
2.使用条件构造器 在需要构建查询条件的地方,可以通过 LambdaQueryWrapper 或者 QueryWrapper 来创建条件构造器对象,然后调用其方法来构建查询条件。例如:
// 通过 LambdaQueryWrapper 创建条件构造器
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getAge, 30)
.like(User::getName, "Smith")
.orderByDesc(User::getCreateTime);
// 执行查询
List<User> userList = userMapper.selectList(wrapper);
3.示例
假设有一个名为 User 的实体类,包含 id、name、age 和 create_time 等字段。我们可以使用条件构造器来构建查询条件,示例如下:
// 创建 LambdaQueryWrapper 对象
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
// 构建查询条件
wrapper.eq(User::getAge, 30) // 年龄等于 30
.like(User::getName, "Smith") // 姓名包含 "Smith"
.orderByDesc(User::getCreateTime); // 根据创建时间降序排序
// 执行查询
List<User> userList = userMapper.selectList(wrapper);
QueryWrapper的使用
QueryWrapper 用于构建查询条件,例如 eq(等于)、ne(不等于)、like(模糊查询)等条件。使用 QueryWrapper 可以将查询条件动态地添加到查询语句中,而无需手动编写复杂的 SQL 语句。以下是一个简单的示例:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25).like("name", "张");
List<User> userList = userMapper.selectList(queryWrapper);
在上面的示例中,queryWrapper.eq("age", 25) 表示添加一个等于条件queryWrapper.like("name", "张") 则表示添加一个模糊查询条件。最后,使用 userMapper.selectList(queryWrapper) 执行查询操作。
UpdateWrapper的使用
UpdateWrapper 用于构建更新条件,例如 set(设置值)、eq(等于)、ne(不等于)等条件。使用 UpdateWrapper 可以将更新条件动态地添加到更新语句中,而无需手动编写复杂的 SQL 语句。以下是一个简单的示例:
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("age", 26).eq("name", "张三");
int affectedRows = userMapper.update(null, updateWrapper);
在上面的示例中,updateWrapper.set("age", 26) 表示设置更新的字段和数值,updateWrapper.eq("name", "张三") 则表示添加一个等于条件。最后,使用 userMapper.update(null, updateWrapper) 执行更新操作。