哈喽,大家好呀!这里是码农后端。上一篇介绍了什么是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)删除操作:
代码语言:sql复制update user set deleted = 1 where id = 1 and deleted = 0;
2)查询操作:
代码语言:sql复制select * from user where deleted = 0;
3.3 MP实现
MybatisPlus提供了逻辑删除功能,只需要在application.yaml文件中配置逻辑删除的字段名称和值即可。
代码语言:yml复制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注解
代码语言:java复制@EnumValue
private final int value;
@JsonValue
private final string desc;
2)在配置文件中配置统一的枚举处理器,实现类型转换
代码语言:yaml复制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)编写测试类测试
好了,以上就是这篇文章的全部内容了,我们下期再见!
我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!