关于Mybatis-Plus字段策略与数据库自动更新时间的一些问题

 更新时间:2020年10月15日 10:03:19   作者:Fearlessroy  
这篇文章主要介绍了关于Mybatis-Plus字段策略与数据库自动更新时间的一些问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

字段策略 0:”忽略判断”,1:”非 NULL 判断”),2:”非空判断”

问题描述

当字段策略为 0 “忽略判断” 的时候,如果实体和数据库有字段是需要自动更新的,例如update_time,更新某条记录的时候自动刷新update_time,理论上我们在业务控制的时候是不需要设置update_time的,利用数据库特性就好,但是在该字段策略下,业务逻辑要更新字段(没有主动设置 update_time),这时候因为忽略判断,数据库(我这里是MySql)是不会去更新update_time的,即使这个字段在数据库中是这样定义的:update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE,在这种字段策略下,该字段会被设为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封装好的方法时才会有 效,使用自己定义的service并不会生效,这是个坑,所以这种 方式我并不推荐。

将字段策略设为 2 “非空判断”

这时候,无论是插入还是更新语句都只会完成对已设置具体值得属性进行操作。例如:表中除了update_time以外,还有user_name字段,我们在代码中设置了这个字段的值,那么在insert的时候执行的语句是: insert into table (user_name) valuse(userName),而不会去对没有设置值得字段做任何操作,这样,有关时间的字段就可以直接交给数据库了。

字段策略为 ““非空判断”” 的一个问题

假设有个Entity User,这个Entity属性没有默认值,我们 new 一个实例,User user = new User(),然后啥也没做,调用UserService.insert(),这时候就会出现一个问题,Mybatis-plus不知道你想插入哪些值,因为没有显示setter,这是一个需要注意的问题。

到此这篇关于关于Mybatis-Plus字段策略与数据库自动更新时间的一些问题的文章就介绍到这了,更多相关Mybatis-Plus 字段策略内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Java中String创建的字符串对象内存分配测试问题

    关于Java中String创建的字符串对象内存分配测试问题

    这篇文章主要介绍了Java中String创建的字符串对象内存分配测试,给大家详细介绍了在创建String对象的两种常用方法比较,通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • Java9垃圾回收方法finalize() 原理解析

    Java9垃圾回收方法finalize() 原理解析

    这篇文章主要介绍了Java9垃圾回收方法finalize() 原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • java ThreadLocal 类常用方法源码解析

    java ThreadLocal 类常用方法源码解析

    这篇文章主要为大家介绍了java ThreadLocal类常用方法源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • SpringBoot中Aware接口使用及原理解析

    SpringBoot中Aware接口使用及原理解析

    在Spring中存在一个Aware接口,实现该接口可以让我们的Bean获取到Spring容器中特定的资源,但该接口只是个标记接口,不存在任何方法,本文将给大家详细介绍一下SpringBoot中Aware接口使用及原理,需要的朋友可以参考下
    2023-08-08
  • Java中Iterator(迭代器)的用法详解

    Java中Iterator(迭代器)的用法详解

    Java迭代器(Iterator)是 Java 集合框架中的一种机制,它提供了一种在不暴露集合内部实现的情况下遍历集合元素的方法。本文主要介绍了它的使用方法,希望对大家有所帮助
    2023-05-05
  • Maven将代码及依赖打成一个Jar包的方式详解(最新推荐)

    Maven将代码及依赖打成一个Jar包的方式详解(最新推荐)

    这篇文章主要介绍了Maven将代码及依赖打成一个Jar包的方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Java ArrayAdapter用法案例详解

    Java ArrayAdapter用法案例详解

    这篇文章主要介绍了Java ArrayAdapter用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 使用JMF实现java视频播放器

    使用JMF实现java视频播放器

    这篇文章主要为大家详细介绍了使用JMF实现java视频播放器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • SpringBoot利用观察者模式实现联动更新机制

    SpringBoot利用观察者模式实现联动更新机制

    观察者模式(Observer Pattern)是一种软件设计模式,在许多应用系统中,我们经常需要处理多个表之间的关联更新问题,本文将通过一个具体的案例,介绍如何在Spring Boot项目中利用观察者模式来优雅地解决这一需求,需要的朋友可以参考下
    2024-07-07
  • JAVA多线程间通讯常用实现方法解析

    JAVA多线程间通讯常用实现方法解析

    这篇文章主要介绍了JAVA多线程间通讯常用实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09

最新评论