文章目录
- 一、前言
- 二、核心功能
- 2.1、条件构造器
- 2.1.1、基础查询条件
- 2.1.2、复杂查询条件
- 2.1.3、动态查询条件
- 2.1.4、查询结果排序
- 2.1.5、执行查询
- 2.2、主键策略
- 2.2.1、自增主键策略
- 2.2.2、UUID 主键策略
- 2.2.3、雪花算法主键策略
- 2.2.4、自定义 ID 生成策略
- 三、总结
一、前言
MyBatis-Plus 是一个基于 MyBatis 的增强工具,提供了一系列强大的功能,能够极大地简化 Java 持久层的开发。本文将深入探讨 MyBatis-Plus 的核心功能,包括条件构造器、主键策略以及自定义 ID 生成器。
二、核心功能
2.1、条件构造器
条件构造器能够让开发者以更优雅的方式构建复杂的查询条件,从而提升查询的灵活性和可读性。
2.1.1、基础查询条件
条件构造器的基本概念是创建一个 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
方法分别添加了等于和模糊查询的条件。
2.1.2、复杂查询条件
条件构造器支持各种复杂的查询条件组合,如 BETWEEN、IN、OR 等。以下是一些示例:
queryWrapper.between("age", 20, 30).in("department", "IT", "Finance").or().like("name", "Smith");
在上述代码中,我们使用 between
方法添加了一个范围查询条件,使用 in
方法添加了一个多选项查询条件,使用 or
方法创建了一个 OR 条件组。
2.1.3、动态查询条件
条件构造器还支持根据条件是否成立来动态添加查询条件,这在动态查询中非常有用。以下是一个示例:
if (StringUtils.isNotEmpty(keyword)) {queryWrapper.like("name", keyword);
}
if (minAge != null && maxAge != null) {queryWrapper.between("age", minAge, maxAge);
}
在上述代码中,我们根据不同的情况动态添加了查询条件,使得查询更加灵活。
2.1.4、查询结果排序
条件构造器还支持添加排序条件,使得查询结果按照指定的字段进行排序:
queryWrapper.orderByAsc("age").orderByDesc("salary");
2.1.5、执行查询
最后,我们使用 QueryWrapper 对象执行查询:
List<User> userList = userMapper.selectList(queryWrapper);
2.2、主键策略
2.2.1、自增主键策略
自增主键策略是最常见的主键生成策略,适用于大多数数据库。通过自增,数据库会自动为每个插入的记录生成唯一的主键值。在 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;// 其他字段...
}
2.2.2、UUID 主键策略
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;// 其他字段...
}
2.2.3、雪花算法主键策略
雪花算法主键策略是一种高效的分布式唯一 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;// 其他字段...
}
2.2.4、自定义 ID 生成策略
如果以上内置的主键策略不满足需求,你还可以使用自定义的 ID 生成策略。首先,你需要实现 IdentifierGenerator
接口,然后在实体类中使用 IdType.INPUT
指定使用自定义生成器。
@Component
public class CustomIdGenerator implements IdentifierGenerator {@Overridepublic 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 细节。