关于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 字段策略内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot如何整合FreeMarker模板引擎

    Spring Boot如何整合FreeMarker模板引擎

    这篇文章主要介绍了Spring Boot如何整合FreeMarker模板引擎,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • SpringBoot用JdbcTemplates操作Mysql实例代码详解

    SpringBoot用JdbcTemplates操作Mysql实例代码详解

    JdbcTemplate是Spring框架自带的对JDBC操作的封装,目的是提供统一的模板方法使对数据库的操作更加方便、友好,效率也不错,这篇文章主要介绍了SpringBoot用JdbcTemplates操作Mysql
    2022-10-10
  • SpringBoot利用Redis解决海量重复提交问题

    SpringBoot利用Redis解决海量重复提交问题

    本文主要介绍了SpringBoot利用Redis解决海量重复提交问题,介绍了三种常见的解决方案,包括使用Redis计数器,使用Redis分布式锁和使用Redis发布/订阅机制,感兴趣的可以了解一下
    2024-03-03
  • Java多线程编程中synchronized关键字的基础用法讲解

    Java多线程编程中synchronized关键字的基础用法讲解

    Java的synchronized关键字用于修饰线程同步,用以线程资源共享的目的等,下面就带来简单的Java多线程编程中synchronized关键字的基础用法讲解
    2016-06-06
  • 在SpringBoot环境中使用Mockito进行单元测试的示例详解

    在SpringBoot环境中使用Mockito进行单元测试的示例详解

    Mockito特别适用于在Spring Boot环境中进行单元测试,因为它能够轻松模拟Spring应用中的服务、存储库、客户端和其他组件,通过使用Mockito,开发者可以模拟外部依赖,从而使单元测试更加独立和可靠,本文给大家介绍了在Spring Boot环境中使用Mockito进行单元测试
    2024-01-01
  • 什么是RESTful API,有什么作用

    什么是RESTful API,有什么作用

    提到RESTful API大家势必或多或少听说过,但是什么是RESTful API ?如何理解RESTful API 呢?今天咱们就来聊聊这个RESTful API
    2023-11-11
  • java返回的List进行add操作报错

    java返回的List进行add操作报错

    本文主要介绍了java返回的List进行add操作报错,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 详解通过maven运行项目的两种方式

    详解通过maven运行项目的两种方式

    这篇文章主要介绍了通过maven运行项目的两种方式,给大家提到了通过tomcat的方式来启动maven项目的方法,通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • Spring核心IoC和AOP的理解

    Spring核心IoC和AOP的理解

    本文主要介绍了Spring核心IoC和AOP的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-03-03
  • Java中使用Hutool的DsFactory操作多数据源的实现

    Java中使用Hutool的DsFactory操作多数据源的实现

    在Java开发中,管理多个数据源是一项常见需求,Hutool作为一个全能的Java工具类库,提供了DsFactory工具,帮助开发者便捷地操作多数据源,感兴趣的可以了解一下
    2024-09-09

最新评论