网站内容更新策略(【知识点】关于有关的一些常见问题(一))
优采云 发布时间: 2021-09-10 06:03网站内容更新策略(【知识点】关于有关的一些常见问题(一))
今天和大家聊聊Mybatis-Plus的字段策略和数据库的自动更新时间。很多人可能不太了解。为了让大家更了解,小编为大家总结了以下内容,希望大家关注这个文章可以有所收获。
字段策略0:“忽略判断”,1:“非空判断”),2:“非空判断”
问题描述:
字段策略为0“忽略判断”时,如果实体和数据库有需要自动更新的字段,比如update_time,update_time会在一条记录更新时自动刷新。理论上,我们不受业务控制。如果需要设置update_time,就使用数据库特性,但是在这种字段策略下,业务逻辑必须更新字段(不是主动设置update_time)。这时候,因为判断被忽略,数据库(这里是MySql)不会更新update_time,即使在数据库中这样定义这个字段:update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE,在这个字段策略下,该字段也会被设置to null,insert into table(….,update_time) values(…, null)时的具体执行语句。
解决方案
实现MetaObjectHandler的insertFill()方法和updateFill()方法
@Component
public class MyMetaObjectHandler extends MetaObjectHandler {
//新增填充
@Override
public void insertFill(MetaObject metaObject){
// 获取当前时间,自动更新以下数据库字段
setFieldValByName("updateTime", new Date(), metaObject);
}
//更新填充
@Override
public void updateFill(MetaObject metaObj ct) {
// 获取当前时间,自动更新以下数据库字段
setFieldValByName("updateTime", new Date(), metaObject);
}
}
添加一个新的Component,继承MetaObjectHandler,覆盖insertFill()和updateFill()方法,自定义插入和更新规则,在基类中继承这两个方法为空。
注意这个方法只有在使用Mybatis-plus封装的方法时才会有效。使用自己定义的服务不会生效。这是个坑,所以不推荐这种方法。
设置字段策略为2“非空判断”
此时,insert 和 update 语句都只会完成对已经设置好的特定值属性的操作。例如:表中除了update_time,还有一个user_name字段。我们在代码中设置了这个字段的值。然后insert时执行的语句是:insert into table (user_name) valuse(userName),不会去右边不要设置value字段做任何操作,这样时间相关的字段就可以直接交出来了到数据库。
字段策略“非空判断”的问题
假设有一个Entity User,这个Entity属性没有默认值,我们新建一个实例,User user = new User(),然后什么都不做,调用UserService.insert(),那么就会有问题。 Mybatis-plus不知道你要插入哪些值,因为setter不显示,这是一个需要注意的问题。
看完以上内容,您对Mybatis-Plus的字段策略和数据库的自动更新时间有进一步的了解吗?如果您想了解更多知识或相关内容,请关注易速云行业资讯频道,感谢您的支持。