MyBatis-Plus 是一个基于 MyBatis 的增强工具,提供了一系列强大的功能,能够极大地简化 Java 持久层的开发。本文将深入探讨 MyBatis-Plus 的核心功能,包括条件构造器、主键策略以及自定义 ID 生成器。
条件构造器能够让开发者以更优雅的方式构建复杂的查询条件,从而提升查询的灵活性和可读性。
条件构造器的基本概念是创建一个 QueryWrapper 对象,然后使用其方法来逐步添加查询条件。我们以一个 User 表为例来说明:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25)
.like("name", "John");
上述代码中,我们创建了一个 QueryWrapper 对象,并使用 eq
和 like
方法分别添加了等于和模糊查询的条件。
条件构造器支持各种复杂的查询条件组合,如 BETWEEN、IN、OR 等。以下是一些示例:
queryWrapper.between("age", 20, 30)
.in("department", "IT", "Finance")
.or()
.like("name", "Smith");
在上述代码中,我们使用 between
方法添加了一个范围查询条件,使用 in
方法添加了一个多选项查询条件,使用 or
方法创建了一个 OR 条件组。
条件构造器还支持根据条件是否成立来动态添加查询条件,这在动态查询中非常有用。以下是一个示例:
if (StringUtils.isNotEmpty(keyword)) {
queryWrapper.like("name", keyword);
}
if (minAge != null && maxAge != null) {
queryWrapper.between("age", minAge, maxAge);
}
在上述代码中,我们根据不同的情况动态添加了查询条件,使得查询更加灵活。
条件构造器还支持添加排序条件,使得查询结果按照指定的字段进行排序:
queryWrapper.orderByAsc("age")
.orderByDesc("salary");
最后,我们使用 QueryWrapper 对象执行查询:
List<User> userList = userMapper.selectList(queryWrapper);
自增主键策略是最常见的主键生成策略,适用于大多数数据库。通过自增,数据库会自动为每个插入的记录生成唯一的主键值。在 MyBatis-Plus 中,使用 IdType.AUTO
可以指定自增主键策略。
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
public class User {
@TableId(type = IdType.AUTO) // 自增主键
private Long id;
// 其他字段...
}
UUID 主键策略通过生成 UUID(通用唯一标识符)来确保主键的全局唯一性。这对于分布式系统中的数据一致性非常重要。在 MyBatis-Plus 中,使用 IdType.ASSIGN_UUID
可以指定 UUID 主键策略。
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
public class Product {
@TableId(type = IdType.ASSIGN_UUID) // UUID 主键
private String id;
// 其他字段...
}
雪花算法主键策略是一种高效的分布式唯一 ID 生成算法,能够在分布式环境下生成有序的、唯一的 ID。在 MyBatis-Plus 中,使用 IdType.ASSIGN_ID
可以指定雪花算法主键策略。
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
public class Order {
@TableId(type = IdType.ASSIGN_ID) // 雪花算法主键
private Long id;
// 其他字段...
}
如果以上内置的主键策略不满足需求,你还可以使用自定义的 ID 生成策略。首先,你需要实现 IdentifierGenerator
接口,然后在实体类中使用 IdType.INPUT
指定使用自定义生成器。
@Component
public class CustomIdGenerator implements IdentifierGenerator {
@Override
public Long nextId(Object entity) {
// 自定义 ID 生成逻辑
// 返回生成的 ID
}
}
public class CustomEntity {
@TableId(type = IdType.INPUT, inputType = CustomIdGenerator.class) // 自定义 ID 生成策略
private Long id;
// 其他字段...
}
MyBatis-Plus 不仅在 CRUD 操作上提供了极大的便利,还提供了更高级的功能,如条件构造器、主键策略和自定义 ID 生成器。这些功能的集成使得持久层操作更加简单而灵活,让开发者能够专注于业务逻辑而不用过多关注 SQL 细节。