MyBatis-Plus不使用数据库默认值的问题及解决
作者:养-乐多 发布时间:2023-11-13 17:37:20
MyBatis-Plus不使用数据库默认值的问题
有时候我们在设计数据表时希望某些字段使用默认值,比如create_time、和update_time这样在数据库中设置:
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
Navicat截图如下(网络图片)
也就是说只要是插入操作create_time和update_time字段就使用系统时间,只要是更新时update_time字段也随着更新,无需手动赋值mysql自动帮我们做了。
MyBatis-Plus如何设置呢?
有时候我们的业务是先查询到实体对象,然后修改某个值再进行更新,比如这样:
LambdaQueryWrapper<ImKnowledgeSearchRecord> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ImKnowledgeSearchRecord::getKeyword, keyword);
ImKnowledgeSearchRecord knowledgeSearchRecord = this.getOne(lambdaQueryWrapper, true);
if (knowledgeSearchRecord == null) {
knowledgeSearchRecord = new ImKnowledgeSearchRecord();
knowledgeSearchRecord.setKeyword(keyword);
knowledgeSearchRecord.setSearchCount(0);
} knowledgeSearchRecord.setSearchCount(knowledgeSearchRecord.getSearchCount() + 1);
// knowledgeSearchRecord.setUpdateTime(null);
this.updateById(knowledgeSearchRecord);
注意上面的实体类中有CreateTime和UpdateTime字段,如果不做任何配置的画,MyBatis-Plus默认使用
this.getOne(lambdaQueryWrapper, true);
查询出来的值作为参数赋值,然后你就会发现update_time字段并没有随着修改而变化,但这不符合我们数据表的设计初衷,那该怎么做?
/**
* 创建时间(数据库自动生成,无需手动赋值)
*/
@TableField(insertStrategy = FieldStrategy.NEVER)
private Date createTime;
/**
* 修改时间(数据库自动生成,无需手动赋值)
*/
@TableField(updateStrategy = FieldStrategy.NEVER)
private Date updateTime;
使用@TableField注解,分别设置插入策略和更新策略为FieldStrategy.NEVER,表示这两个字段不加入SQL,这样生成的插入和修改的SQL语句就不会包含这两个字段。
只使用MyBatis-Plus的注解,而不用配置数据库
我们在项目开发时,特别是多module项目场景时,可能会遇到某些实体类要使用mybatis-plus的注解,如@tableName或者@TableField等, 但是如果引入mybatis依赖就要配置数据库,但实际上有可能这个项目只是个公共实体类、接口类等的一个公共module,在该公共module中写一遍这些实体类,接口等,然后在其他module中直接依赖这个公共module就可以了,所以在这个场景下,这个公共module就不需要连接数据库,自然而然也不需要配置数据库
解决
因为mybatis-plus的maven依赖一旦添加了是需要配置数据库的,所以我们需要换一个依赖
如下所示,mybatis-plus-annotation依赖只包含mybatis-plus的注解
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>3.2.0</version>
</dependency>
来源:https://blog.csdn.net/qq_15003505/article/details/114087949


猜你喜欢
- 今天带大家实现滑动返回效果.,具体内容如下所示:先看看效果图:因为没有具体内容,也没有简书的图片资源,所以稍微简陋了点.但是依然不妨碍我们的
- Android中手机震动的设置(Vibrator)的步骤: a、通过系统服务获得手机震动服务,Vibrator vibrator = (Vi
- idea默认带的equals和hashcode引起的bug最近因规范需要,统一使用idea,使用的版本为2017.4.建立一个实体类,在添加
- 今天做项目的时候,遇到一个问题,如果我调用某个服务的接口,但是这个服务挂了,同时业务要求这个接口的结果是必须的,那我该怎么办呢,答案是通过h
- 调取钉钉考勤接口的功能公司需要做一个钉钉考勤的页面,让我去写这个功能。结果却比我想象的要麻烦一些!具体是怎么个麻烦呢下面直入正题首先我们找到
- 一.数组的三种声明方式总结public class WhatEver { public static void main(Str
- C语言的指针相当的灵活方便,但也相当容易出错。许多C语言初学者,甚至C语言老鸟都很容易栽倒在C语言的指针下。但不可否认的是,指针在C语言中的
- try { using (TransactionScope tr = new Transact
- mybatis 传入null值解决前端传入两个值,如果其中一个为null时,很多时候我们都很困惑,明明传入的是null,为啥mybatis
- Controller层和Service层的类报错当出现以下这种情况的时候,可以看看pom.xml文件中是否少了jar包。当我出现这种情况的时
- DataGridView是Visual Studio中一个最重要的数据控件。它可以应用在大多数场合,功能强大,使用灵活。本文要重点介绍一下,
- 前言:this 和 super 都是 Java 中常见的关键字,虽然二者在很多情况下都可以被省略,但它们在 Java 中所起的作用是不可磨灭
- 前言Java.util包中的List接口继承了Collection接口,用来存放对象集合,所以对这些对象进行排序的时候,要么让对象类自己实现
- 在文本框中输入一个数字,点击开始累加按钮,程序计算从1开始累计到该数字的结果。因为该累加过程比较耗时,如果直接在UI线程中进行,那么当前窗口
- 1、java 的下载和安装一、安装JDKjava下载网址 或者 点击这里根据自己操作系统和系统位数下载相应的JDK安装
- 这段时间想到一个有趣的功能,就是在Android的代码编译期间进行一些骚操作,来达到一些日常情境下难以实现的功能,比如监听应用中的所有onC
- 背景:由于所在办公室网络限制,笔者每天都使用网络都要先连接无线网。如下图,输入授权用户信息登录后才能使用WIFI。丧心病狂的是该网页Cook
- Android中的翻转动画效果的实现,首先看一下运行效果如上图所示. Android中并没有提供直接做3D翻转的动画,所以关于3D翻转的动画
- 循环结构分两大类,一类是当型,一类是直到型。当型:当布尔值表达式条件为True时,反复执行某语句,当布尔表达式的值为False时才停止循环,
- 输入一个数组,然后颠倒次序进行输出,这种算法在程序开发