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
猜你喜欢
- BitArray的基础可以看菜鸟编程BitArray 类管理一个紧凑型的位值数组,它使用布尔值来表示,其中 true 表示位是开启的(1),
- java 请求跨域问题解决方法实例详解新建Util类,在Util中添加下面方法: /* * response请求跨域公共设置
- 之前我们在使用vue进行 h5 表单录入的过程中,遇到了Android软键盘弹出,覆盖 h5页面 输入框 问题,在此进行回顾并分享给大家:系
- 一、Sharding-JDBC简介Sharding-JDBC是Sharding-Sphere的一个产品,它有三个产品,分别是Sharding
- 技术场景在日常的开发、测试或运维的过程中,经常存在这样的场景,开发人员在代码中使用日志工具(log4j、slf4j)记录日志,比如请求ID、
- 在实际开发中,我们经常会需要在页面跳转的时候携带路由参数,典型的例子就是从列表到详情页的时候,需要携带详情的 id,以便详情页获取对应的数据
- ArrayList集合的创建非泛型创建ArrayList集合对象,可以添加任意Object子类元素至集合//非泛型创建的ArrayList集
- 前言本文将带您了解在 Flutter 中制作翻转卡片动画的两个完整示例。第一个示例从头开始实现,第二个示例使用第三方包。闲话少说,让我们动手
- 有时候,我们需要制作一个Word模板文档,然后发给用户填写,但我们希望用户只能在指定位置填写内容,其他内容不允许编辑和修改。这时候我们就可以
- 一、maven引入依赖,数据库驱动根据项目需求自行引入<!-- https://mvnrepository.com/artifact/
- 井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以使用一个二维数组来表示棋盘,判断胜负只需要判断数
- AsyncTask什么是AsyncTaskAsyncTask是一个轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和结果传
- 阅读提示 具有mybatis基础,熟练使用mybatis-plus。概述 我们都知道,mybatis-plus是一个mybatis的增强
- 1、何为依赖冲突Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。举个例子,现在你的
- 引言我已经一个多星期没碰过电脑了,今日上班,打开电脑的第一件事就是想着写点什么。反正大家都还沉浸在节后的喜悦中,还没进入工作状态,与其浪费时
- 建造者模式针对的是复杂对象的构建,比如一个产品有多个部分构成,每个部分都可以单独进行生产,这时候就可以用建造者模式,由Builder构造产品
- 1. strlen —— 求字符串长度1.1 strlen 的声明与用处strlen ,我们有一些英
- 注意是maven的webapp:选择maven下一步下一步。maven下载过慢在setting中加入镜像。 我也有疑问这是什么鬼格式,但是证
- IDEA创建一个传统JAVA WEB项目(不使用maven构建)方法一File --> NEW --> Project --&g
- MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作。为什么要