一般来说某些项目比较规范的情况下,大多数表都会有逻辑删除字段和通用字段,例如更新时间,创建时间,更新人,创建人等等,但是在代码开发上会产生很多冗余的代码,逻辑删除的话,自己写比较繁琐,而且容易有遗漏逻辑。
本来打算自己写切面去实现,偶然发现mybatis-plus已经帮封装实现了,试了一下,很好用,所以分享一下。
逻辑删除
逻辑删除的意思就是某些业务表,在用户删除某条数据的时候,不真正删除,而是将此数据某字段改成类似“已删除”,而查询语句、更新语句等会忽略此条被逻辑删除的数据。
这里就不多介绍mybatis-plus的基础使用了,没接触过的小伙伴可以去官网研究一下,都是中文,很好看懂。
贴一下我们mybatis-plus的pom依赖:
<!-- mybatis plus 核心依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency> <!-- mybatis plus 代码生成器依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.0</version> </dependency> <!-- 代码生成器模板 --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.1</version> </dependency>
逻辑删除比较简单,在3.3版本之后只要两步:
1.在配置文件中加入:
mybatis-plus: global-config: db-config: logic-delete-field: deleted # 全局逻辑删除的实体字段名 logic-delete-value: 1 # 逻辑已删除值(默认为 1) logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
这里的deleted就是数据库表中表示逻辑删除与否的字段名,一般都是tinyint或者boolean,如果是boolean,logic-delete-value和logic-not-delete-value设置成true和false就行。
2.实体类字段上加上@TableLogic注解
@TableLogic private Boolean deleted;
当然,一般自动生成的entity一般不建议做改动,因为entity和mapper经常会重新生成,这样加的代码就消失了,这里我们修改mybatis-plus代码生成器中的一个配置实现:
StrategyConfig strategy = new StrategyConfig(); // 省略命名规范、entity模式等其他配置 strategy.setLogicDeleteFieldName("deleted");
这里deleted同样是表字段名,而不是生成的类字段名。
加了这段配置后,自动生成的entity就会带有@TableLogic注解了。
在使用了封装化的逻辑删除后,mybatis-plus就能帮我们实现:
- 调用mapper.delete类方法后,不删除对应的记录,而是将匹配到的记录的逻辑删除字段设置为我们设定的logic-delete-value值。
- 调用查询语句包括selectList、selectById等语句或者更新语句时,会自动拼上逻辑删除字段的查询条件,达到不会查询出已本文来源[email protected]搞@^&代*@码)网5逻辑删除的记录
通用字段自动化填充
如果说项目要求表设计上需要有一些通用字段,比如我现在做的项目每个主体表都需要有创建时间、更新时间、创建人、更新人这四个字段,mybatis-plus可以帮我们自动填充这四个字段,而不需要我们自己修改。
当然,这四个字段的获取逻辑必须是有通用方式的。