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
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
java按字节截取带有汉字的字符串的解法(推荐)
java向多线程中传递参数的三种方法详细介绍
Java 实现repalceAll只替换第二个匹配到的字符串
Android升级支持库版本遇到的两个问题详解
java mybatis如何操作postgresql array数组类型
springboot @ConditionalOnMissingBean注解的作用详解
![](https://img.aspxhome.com/file/2023/4/61794_0s.png)
LINQ基础之Intersect、Except和Distinct子句
Android小知识之OkHttp的2种请求方式详解
C#实现将网页保存成图片的网页拍照功能
Java实现排队论的原理
![](https://img.aspxhome.com/file/2023/2/81992_0s.jpg)
Linux中Java开发常用软件安装方法总结
![](https://img.aspxhome.com/file/2023/2/85912_0s.png)
VS2022+unity3D开发环境搭建的实现步骤
![](https://img.aspxhome.com/file/2023/4/113894_0s.jpg)
WebView的介绍与简单实现Android和H5互调的方法
![](https://img.aspxhome.com/file/2023/7/101817_0s.png)
Java轻量级权限认证框架Sa-Token的使用
![](https://img.aspxhome.com/file/2023/8/105948_0s.jpg)
DataGridView实现点击列头升序和降序排序
![](https://img.aspxhome.com/file/2023/0/129660_0s.jpg)
Java spring的三种注入方式详解流程
![](https://img.aspxhome.com/file/2023/0/85910_0s.png)
Java数组(Array)最全汇总(上篇)
![](https://img.aspxhome.com/file/2023/8/77498_0s.jpg)
Android 支付宝支付、微信支付、银联支付 整合第三方支付接入方法(后台订单支付API设计)
![](https://img.aspxhome.com/file/2023/0/139530_0s.png)