1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > MyBatis-Plus 扩展篇 > 自动填充功能

MyBatis-Plus 扩展篇 > 自动填充功能

时间:2024-03-05 09:55:02

相关推荐

MyBatis-Plus 扩展篇 > 自动填充功能

目标:

懂得实现 Mybatis-Plus的自动填充


实现步骤:

1、新建一个handle类 实现元对象处理器接口

2、实体类属性上 添加对应的注解(注解填充字段 @TableField)


一、如何理解MyBatis-Plus的自动填充呢?

可以翻开之前的SMBMS博客,里面关于数据库中的表属性是否带了两个属性,即创建时间修改时间,每当创建(插入)一条新数据时,会在 实体类对象创建时 赋予 new Date() 给创建时间属性,同时在修改数据时也会使用 new Date() 重新赋予 修改时间的值,以确保同步。

那么,我们要如何使用MyBatis-Plus进行自动填充呢?

1、首先修改数据库表的设计,新增两个字段

实体类也要修改对应属性

2、新建一个handle类 实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler

@Component // 将处理器加入到IOC容器中public class MyHandle implements MetaObjectHandler {// 插入时的填充策略@Overridepublic void insertFill(MetaObject metaObject) {this.setFieldValByName("createTime", new Date(),metaObject);this.setFieldValByName("updateTime", new Date(),metaObject);}// 更新时的填充策略@Overridepublic void updateFill(MetaObject metaObject) {this.setFieldValByName("updateTime", new Date(),metaObject);}}

setFieldValByName方法具体参数

3、实体类属性上 添加对应的注解(注解填充字段 @TableField)

4、测试插入数据 和 更新数据

测试插入

@Testvoid testInsert(){User user = new User();user.setName("CSNZ_WX");user.setAge(21);int res = userMapper.insert(user);System.out.println(res);}

测试更新

@Testvoid testUpdate(){User user = new User();user.setId(1491710152594796547L);user.setName("wx:CSNZ_WX");int res = userMapper.updateById(user);System.out.println(res);}

二、到这里肯定又对@TableField注解 有疑惑了

看源码

生成器策略部分 --> @TableField(…fill = FieldFill.INSERT)

可以看到FieldFill也是一个枚举类,并且fill属性的值 默认为FieldFill默认不处理

我们上面那个案例用的是插入填充字段插入和更新填充字段

三、注意事项 🦌

填充原理是直接给实体类的属性设置值!!!注解则是指定该属性在对应情况下必有值,如果无值则入库会是nullMetaObjectHandler提供的默认方法的策略均为 : 如果属性有值则不覆盖,如果填充值为null则不填充字段必须声明TableField注解, 属性fill选择对应策略, 该声明告知Mybatis-Plus需要预留注入SQL字段填充处理器MyMetaObjectHandlerSpring Boot中需要声明@Component@Bean注入 将处理器加入到IOC容器中要想根据注解FieldFill.xxx和字段名以及字段类型来区分必须使用父类的strictInsertFill或者strictUpdateFill方法不需要根据任何来区分可以使用父类的fillStrategy方法update(T t , Wrapper updateWrapper)时t不能为空 , 否则自动填充失效

tips: 使用mybatis-plus配置日志

application.properties增加

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

即可实现日志输出

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。