专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

Mybatis Plus框架学习指南-第三节内容

ins518 2025-07-27 20:36:08 技术文章 3 ℃ 0 评论

自动填充字段

基本概念

MyBatis-Plus 提供了一个便捷的自动填充功能,用于在插入或更新数据时自动填充某些字段,如创建时间、更新时间等。

原理

自动填充功能通过实现
com.baomidou.mybatisplus.core.handlers.
MetaObjectHandler 接口来实现。你需要创建一个类来实现这个接口,并在其中定义插入和更新时的填充逻辑

使用步骤

1、定义实体类

在实体类中,你需要使用 @TableField 注解来标记哪些字段需要自动填充,并指定填充的策略。

2、实现 MetaObjectHandler接口

创建一个类来实现 MetaObjectHandler 接口,并重写 insertFill 和 updateFill 方法

3、配置自动填充处理器

确保你的 MyMetaObjectHandler 类被 Spring 管理,可以通过 @Component 或 @Bean 注解来实现

注意事项

1、自动填充是直接给实体类的属性设置值

2、如果属性没有值,入库时会是 null。

3、MetaObjectHandler 提供的默认方法策略是:如果属性有值则不覆盖,如果填充值为 null 则不填充。

4、字段必须声明 @TableField 注解,并设置 fill 属性来选择填充策略。

5、填充处理器需要在 Spring Boot 中声明为 @Component 或 @Bean。

6、使用 strictInsertFill 或 strictUpdateFill 方法可以根据注解 FieldFill.xxx、字段名和字段类型来区分填充逻辑。

7、如果不需区分,可以使用 fillStrategy 方法。

8、在 update(T entity, Wrapper<T> updateWrapper) 时,entity 不能为空,否则自动填充失效。

9、在 update(Wrapper<T> updateWrapper) 时不会自动填充,需要手动赋值字段条件。

主键策略

基本说明

主键生成策略必须使用 INPUT,内置支持:

1、DB2KeyGenerator

2、H2KeyGenerator

3、KingbaseKeyGenerator

4、OracleKeyGenerator

5、PostgreKeyGenerator

如果内置支持不满足你的需求,可实现 IKeyGenerator 接口来进行扩展。

示例

下面是一个使用 @KeySequence 注解的实体类示例

在这个示例中,YourEntity 类使用了 @KeySequence 注解来指定 Oracle 数据库中的序列 SEQ_ORACLE_STRING_KEY 来生成主键值,主键类型为 String。

Springboot整合

方法一:使用配置类

方法二:通过 MybatisPlusPropertiesCustomizer 自定义

自定义ID生成器

基本概念

MyBatis-Plus 提供了灵活的自定义ID生成器功能,允许开发者根据业务需求定制ID生成策略。从3.3.0版本开始,默认使用雪花算法结合不含中划线的UUID作为ID生成方式。

MyBatis-Plus自带主键生成策略对比

如何自定义

Spring Boot 集成

方式一:声明为Bean供Spring扫描注入

方式二:使用配置类

方式三:通过MybatisPlusPropertiesCustomizer自定义

@Bean

public MybatisPlusPropertiesCustomizer plusPropertiesCustomizer() {

return plusProperties -> plusProperties.getGlobalConfig().setIdentifierGenerator(new CustomIdGenerator());

}

与KeyGenerator的差异

MyBatis-Plus的IdentifierGenerator主要用于生成数据库表的主键ID,而KeyGenerator是MyBatis框架中的一个接口,用于在执行SQL语句时生成键值,通常用于生成自增主键或者在执行INSERT语句后获取新生成的ID。

IdentifierGenerator更加专注于主键ID的生成,而KeyGenerator则更加通用,可以用于多种键值生成场景。在使用MyBatis-Plus时,通常推荐使用IdentifierGenerator来生成主键ID,因为它与MyBatis-Plus的集成更加紧密,提供了更多的便利性和功能。

逻辑删除支持

基本概念

逻辑删除是一种优雅的数据管理策略,它通过在数据库中标记记录为“已删除”而非物理删除,来保留数据的历史痕迹,同时确保查询结果的整洁性。

工作原理

MyBatis-Plus 的逻辑删除功能会在执行数据库操作时自动处理逻辑删除字段。以下是它的工作方式:

插入:逻辑删除字段的值不受限制。

查找:自动添加条件,过滤掉标记为已删除的记录。

更新:防止更新已删除的记录。

删除:将删除操作转换为更新操作,标记记录为已删除。

例如:

删除:update user set deleted=1 where id = 1 and deleted=0

查找:select id,name,deleted from user where deleted=0

支持的数据类型

逻辑删除字段支持所有数据类型,但推荐使用 Integer、Boolean 或 LocalDateTime。 如果使用 datetime 类型,可以配置逻辑未删除值为 null(长度为4的字符串,在yaml中需使用转义符(单引号)包裹),已删除值可以使用函数如 now() 来获取当前时间。 如果使用 bigint 类型,可以配置逻辑未删除值为 0,已删除值可以使用函数如 UNIX_TIMESTAMP() 来获取当前时间戳作为删除标识。适合用于将删除字段作为唯一索引组成列,可以多次逻辑删除

使用方法

1、配置全局逻辑删除属性

在 application.yml 中配置 MyBatis-Plus 的全局逻辑删除属性。

2、在实体类中使用 @TableLogic 注解

在实体类中,对应数据库表的逻辑删除字段上添加 @TableLogic 注解

注意事项

1、逻辑删除的本质:逻辑删除的效果应等同于物理删除,其目的是为了保留数据,实现数据价值最大化。

2、业务需求考量:如果业务中仍需频繁查询这些“已删除”的数据,应考虑是否真正需要逻辑删除。或许,一个状态字段来控制数据的可见性更为合适。

多数据源支持

基本概念

随着项目规模的扩大,单一数据源已无法满足复杂业务需求,多数据源(动态数据源)应运而生。

dynamic-datasource

基本概念

dynamic-datasource 是一个开源的 Spring Boot 多数据源启动器,提供了丰富的功能,包括数据源分组、敏感信息加密、独立初始化表结构等。

特性

1、数据源分组:适用于多种场景,如读写分离、一主多从等。

2、敏感信息加密:使用ENC()加密数据库配置信息。

3、独立初始化:支持每个数据库独立初始化表结构和数据库。

4、自定义注解:支持自定义注解,需继承DS。

5、简化集成:提供对Druid、HikariCP 等连接池的快速集成。

6、组件集成:支持 Mybatis-Plus、Quartz 等组件的集成方案。

7、动态数据源:支持项目启动后动态增加或移除数据源。

8、分布式事务:提供基于 Seata 的分布式事务方案。

约定

1、本框架专注于数据源切换,不限制具体操作。

2、配置文件中以下划线 _ 分割的数据源首部为组名。

3、切换数据源可以是组名或具体数据源名

4、默认数据源名为 master,可通过
spring.datasource.dynamic.primary 修改

5、方法上的注解优先于类上的注解

使用方法

1、引入依赖

2、配置数据源

3、使用 @DS 切换数据源

SQL分析与打印

基本概念

MyBatis-Plus提供了SQL分析与打印的功能,通过集成p6spy组件,可以方便地输出SQL语句及其执行时长。本功能适用于MyBatis-Plus 3.1.0及以上版本。

p6spy

基本介绍

p6spy 是一个针对数据库访问进行拦截和记录的工具,它通过代理JDBC驱动程序来工作。这意味着你的应用程序可以像往常一样使用JDBC,而p6spy会在幕后记录所有的SQL语句及其执行时间。这对于开发和调试过程中的SQL优化非常有用。

高级功能

p6spy不仅限于记录SQL日志,它还提供了一些高级功能,如:

慢SQL检测

通过配置outagedetection和outagedetectioninterval,p6spy可以记录执行时间超过设定阈值的SQL语句。

自定义日志格式

通过logMessageFormat,你可以自定义SQL日志的输出格式,包括时间戳、执行时间、SQL语句等。

日志输出控制

appender配置项允许你选择日志输出到控制台、文件或日志系统。

p6spy是一个强大的工具,它为MyBatis-Plus用户提供了便捷的SQL分析与打印功能。通过合理配置,你可以在开发和测试阶段有效地监控和优化SQL语句。然而,由于性能损耗,建议在生产环境中谨慎使用

使用方法

1、依赖引入

首先,需要在项目中引入p6spy依赖

2、配置

需要在application.yml或application.properties中进行相应的配置

application.yml

配置spy.properties文件

p6spy的配置文件spy.properties包含了多个配置项,以下是一些关键配置的示例

springboot集成

对于Spring Boot项目,可以使用p6spy-spring-boot-starter来简化集成过程

添加依赖

配置

注意事项

1、driver-class-name应配置为p6spy提供的驱动类。

2、url前缀应为jdbc:p6spy,后跟实际的数据库连接地址

3、如果打印的SQL为null,请在excludecategories中增加commit

4、如果批量操作不打印SQL,请去除excludecategories中的batch。

5、对于批量操作打印重复的问题,请使用MybatisPlusLogFactory(3.2.1新增)

6、请注意,该插件可能会带来性能损耗,不建议在生产环境中使用

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表