欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > MybatisPlus(二)

MybatisPlus(二)

2024/10/24 1:59:57 来源:https://blog.csdn.net/2301_81718046/article/details/140764987  浏览:    关键词:MybatisPlus(二)

目录

扩展功能

代码生成

静态工具

逻辑删除

枚举处理器

JSON处理器

配置加密

插件功能

插件功能

分页插件(通用分页实体)


扩展功能

代码生成

静态工具

逻辑删除

逻辑删除就是基于代码逻辑模拟删除效果,但并不会真正删除数据。思路如下:

在表中添加一个字段标记数据是否被删除
当删除数据时把标记置为 1
查询时只查询标记为 0 的数据

例如逻辑删除字段为deleted

删除操作:
UPDATE user SET deleted = 1 WHERE id = 1 AND deleted = 0
查询操作:
SELECT * FROM user WHERE deleted = 0

MybatisPlus提供了逻辑删除功能,无需改变方法调用的方式,而是在底层帮我们自动修改CRUD的语句。我们要做的就是在application.yaml文件中配置逻辑删除的字段名称和值即可:

mybatis-plus:global-config:db-config:logic-delete-field: flag # 全局逻辑删除的实体字段名,字段类型可以是boolean、integerlogic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

逻辑删除本身也有自己的问题,比如:

会导致数据库表垃圾数据越来越多,影响查询效率
SQL 中全都需要对逻辑删除字段做判断,影响查询效率

因此,我不太推荐采用逻辑删除功能,如果数据不能删除,可以采用把数据迁移到其它表的办法。

枚举处理器

application.yml中配置全局枚举处理器:

mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

如何实现PO类中的枚举类型变量与数据库字段的转换?

给枚举中的与数据库对应 value 值添加 @EnumValue 注解
@Getter
public enum UserStatus {NORMAL(1, "正常"),FROZEN(2, "冻结");@EnumValueprivate final int value;@JsonValueprivate final String desc;UserStatus(int value, String desc) {this.value = value;this.desc = desc;}
}

在配置文件中配置统一的枚举处理器,实现类型转换

JSON处理器

@Data
@TableName(value = "tb_user", autoResultMap = true)
public class User {@TableField(typeHandler = JacksonTypeHandler.class)private UserInfo info;
}

配置加密

MyBatisPlus3.3.2版本开始提供了一个基于AES算法的加密工具,帮助我们对配置中的敏感信息做加密处理。

        //生成 16 位随机 AES 密钥String randomKey = AES.generateRandomKey();System.out.println("randomKey = " + randomKey);//利用密钥对用户名加密String username = AES.encrypt("root", randomKey);System.out.println("username = " + username);//利用密钥对密码加密String password = AES.encrypt("1234", randomKey);System.out.println("password = " + password);

application.yaml文件中使用刚刚生成的秘钥,代替明文的用户名和密码

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=truedriver-class-name: com.mysql.cj.jdbc.Driverusername: mpw:QWWVnk1Oal3258x5rVhaeQ== # 密文要以 mpw:开头password: mpw:EUFmeH3cNAzdRGdOQcabWg== # 密文要以 mpw:开头

在项目启动的时候,添加AES的秘钥,这样MyBatisPlus就可以解密数据了:

// Jar包启动参数,arguments
--mpw.key=d1104d7c3b616f0b 

单元测试时,可以通过@SpringBootTest来指定秘钥

插件功能

插件功能

MyBatisPlus基于MyBatisInterceptor实现了一个基础拦截器,并在内部保存了MyBatisPlus的内置拦截器的集合

MyBatisPlus提供的内置拦截器有下面这些:

序号

拦截器

描述

1

TenantLineInnerInterceptor

多租户插件

2

DynamicTableNameInnerInterceptor

动态表名插件

3

PaginationInnerInterceptor

分页插件

4

OptimisticLockerInnerInterceptor

乐观锁插件

5

IllegalSQLInnerInterceptor

SQL性能规范插件,检测并拦截垃圾SQL

6

BlockAttackInnerInterceptor

防止全表更新和删除的插件

分页插件(通用分页实体)

首先,要在配置类中注册MyBatisPlus的核心插件,同时添加分页插件: 

@Configuration
public class MybatisConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {// 1.初始化核心插件MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 2.添加分页插件PaginationInnerInterceptor pageInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);pageInterceptor.setMaxLimit(1000L); // 设置分页上限interceptor.addInnerInterceptor(pageInterceptor);return interceptor;}
}

接着,就可以使用分页的API了:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com