时间:2021-05-19
一般来说某些项目比较规范的情况下,大多数表都会有逻辑删除字段和通用字段,例如更新时间,创建时间,更新人,创建人等等,但是在代码开发上会产生很多冗余的代码,逻辑删除的话,自己写比较繁琐,而且容易有遗漏逻辑。
本来打算自己写切面去实现,偶然发现mybatis-plus已经帮封装实现了,试了一下,很好用,所以分享一下。
逻辑删除的意思就是某些业务表,在用户删除某条数据的时候,不真正删除,而是将此数据某字段改成类似“已删除”,而查询语句、更新语句等会忽略此条被逻辑删除的数据。
这里就不多介绍mybatis-plus的基础使用了,没接触过的小伙伴可以去官网研究一下,都是中文,很好看懂。
贴一下我们mybatis-plus的pom依赖:
逻辑删除比较简单,在3.3版本之后只要两步:
这里的deleted就是数据库表中表示逻辑删除与否的字段名,一般都是tinyint或者boolean,如果是boolean,logic-delete-value和logic-not-delete-value设置成true和false就行。
当然,一般自动生成的entity一般不建议做改动,因为entity和mapper经常会重新生成,这样加的代码就消失了,这里我们修改mybatis-plus代码生成器中的一个配置实现:
这里deleted同样是表字段名,而不是生成的类字段名。
加了这段配置后,自动生成的entity就会带有@TableLogic注解了。
在使用了封装化的逻辑删除后,mybatis-plus就能帮我们实现:
如果说项目要求表设计上需要有一些通用字段,比如我现在做的项目每个主体表都需要有创建时间、更新时间、创建人、更新人这四个字段,mybatis-plus可以帮我们自动填充这四个字段,而不需要我们自己修改。
当然,这四个字段的获取逻辑必须是有通用方式的。
1.@TableField注解
这里只是一个例子,FieldFill.INSERT表示在执行insert类方法时会自动填充此字段,FieldFill.UPDATE是在执行update类方法时会自动填充此字段,除此之外还有FieldFill.INSERT_UPDATE表示插入和更新时都会填充。
当然,和逻辑删除一样,我们不会手动去加这个注解,还是依赖代码生成器的配置:
这里的create_time、create_user等是表里的字段名,当mybatis-plus检测到表里有这些字段时,生成的entity会自动加上对应的@TableField注解。
2.自动填充处理类
自定义bean实现MetaObjectHandler接口,并实现insertFill方法和updateFill方法,this.strictUpdateFill方法中添加需要自动填充的entity字段名和填充Function,比如创建时间和更新时间,传入LocalDateTime::now方法,当然也可以用自定义的方法:
这两个步骤完成后,mybatis-plus就可以自动填充此字段了,比如在新增一条记录时,只需要set此记录的业务值,不设置create_time和create_user,直接调用entity.insert()方法,可以在数据库新增的记录中看到create_time自动填充了当前时间,create_user自动填充了session中的当前用户id。
这是字段自动填充一个应用,可拓展方向有很多,大家可以多多思考,自行发挥。
到此这篇关于mybatis-plus 通用字段自动化(如逻辑删除和更新时间等)的文章就介绍到这了,更多相关mybatis-plus 字段自动化内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
已有的springcloud+mybatis项目升级为mybatis-plus项目模块目录将mybatis依赖替换为mybatis-plus修改配置文件实体类如
Mybatis-Plus的配置1.Maven插件velocity-engine-core是mybatis-plus自动生成代码所依赖的模板(不用自动生成代码功能
在使用mybatis或者mybatis-plus时候,有些时候会出现数据库的字段名和实体类的字段名不一致的情况,如果运行那么这个字段就会无法进行自动映射而报错。
原因因为MyBatis-Plus自带的更新方法,都有对对象空值进行判空。只有不为空的字段才会进行数据更新。解决方式在实体类对应的字段上加注解@TableFiel
springboot+mybatis-plus实现内置的CRUD使用详情,具体修改删除操作内容后文也有详细说明mybatis-plus的特性无侵入:只做增强不做