哈喽,大家好呀!这里是码农后端。​上一篇介绍了什么是MyBatisPlus及其核心功能,本篇将带你快速了解MyBatisPlus具有的一些扩展功能!

一、扩展功能

1、问题说明

如下代码片段为实现用户相关的业务,当需要实现订单(order)业务时,只需要将涉及的user类或接口的名称替换为order即可。

不难看出,即使业务需求发生变化,代码的写法也比较固定。


既然写法是固定,那么有没有可以快速生成的工具或插件来帮助我们加快开发效率呢?

2、MyBatisPlus插件

1)下载插件
打开IDEA,点击File ->Settings ->Plugins,搜索MyBatisPlus,点击Install安装即可。

插件安装完成后需要重启IDEA才会起作用

2)配置数据库
点击上方Other ->Config Database,对我们的数据库进行配置,填写对应的数据库名和密码。

配置好数据库后,就能使用了;点击上方Other ->Code Generator,选择表并填写勾选好相关信息后,点击code generator进行代码生成即可。

3、逻辑删除

所谓逻辑删除,是指基于代码逻辑模拟删除效果,不是物理意义上的把数据从磁盘中删除,不会真正删除数据。

3.1 思路

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

3.2 实现

根据上述思路,假设逻辑删除字段为deleted,则
1)删除操作:

1
update user set deleted = 1 where id = 1 and deleted = 0;

2)查询操作:

1
select * from user where deleted = 0;

3.3 MP实现

MybatisPlus提供了逻辑删除功能,只需要在application.yaml文件中配置逻辑删除的字段名称和值即可。

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

3.4 小结

使用逻辑删除,会降低查询效率,原因是:
1)由于逻辑删除并不是真正从物理磁盘中删除,会导致数据库表的垃圾数据越来越多,从而响应表的性能。
2)SQL中全都需要对逻辑删除字段做判断

其他办法:可以把数据迁移到其它表(如果数据不能删除)

4、枚举处理器

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

1)给枚举中的与数据库对应value值添加@EnumValue注解

1
2
3
4
@EnumValue
private final int value;
@JsonValue
private final string desc;

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

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

5、Json处理器

用于解决数据库中json数据类型与java类型之间的转换。

如下,数据库的user表中有一个json类型的字段info;而在java的User实体类中,info字段是String类型的,为了方便,把info属性的相关信息单独抽出来定义为一个UserInfo类,再把info由原来的String类型替换为UserInfo类型。

二、插件功能

MyBatisPlus提供的内置拦截器如下

1、分页插件

1)首先需要在配置类中注册MyBatisPlus的核心插件,并添加分页插件

2)使用分页的API

3)编写测试类测试