网站内容更新策略(【知识点】关于有关的一些常见问题(一))

优采云 发布时间: 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的字段策略和数据库的自动更新时间有进一步的了解吗?如果您想了解更多知识或相关内容,请关注易速云行业资讯频道,感谢您的支持。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线