Mybatis-Plus更新時(shí)間字段不生效的解決
背景
Mybatis-Plus是在Mybatis的基礎(chǔ)上只做增強(qiáng)不做改變,主要是為簡(jiǎn)化開(kāi)發(fā)。項(xiàng)目的背景是使用的就是Mybatis-Plus,但是在運(yùn)行項(xiàng)目過(guò)程中發(fā)現(xiàn)一個(gè)問(wèn)題,當(dāng)使用Mybatis-Plus進(jìn)行數(shù)據(jù)的更新的時(shí)候,更新字段沒(méi)有按照我們所預(yù)想的進(jìn)行對(duì)應(yīng)的時(shí)間的更新。
創(chuàng)建這個(gè)字段的語(yǔ)句如下所示:
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間'
原因分析
使用Mybatis-Plus的更新方法,進(jìn)行對(duì)應(yīng)數(shù)據(jù)實(shí)體的更新,比如使用如下方法:
XXX.updateById() // ....... 等等方法
這些方法使用之后,發(fā)現(xiàn)沒(méi)有對(duì)updateTime字段數(shù)據(jù)進(jìn)行更新。
原因分析:
當(dāng)selectByld從數(shù)據(jù)庫(kù)取出舊數(shù)據(jù),然后修改自己想修改的字段后調(diào)用updateById,會(huì)發(fā)現(xiàn)updateTime字段不會(huì)更新,這是因?yàn)閟electByld可以取出updateTime的舊值,更新時(shí)填充策路會(huì)判斷屬性已有值,不進(jìn)行自動(dòng)填充,因此updateTime不會(huì)自動(dòng)更新。而且官方目前沒(méi)有直接提供強(qiáng)制更新的方法。
查看fillStrategy方法源碼,我們也可以看到只有屬性沒(méi)有被填充值,才會(huì)執(zhí)行set方法。
解決辦法
解決方法一
更新時(shí)設(shè)置更新時(shí)間
TDZopenOrder openOrder = openOrderService.getById(orderId); openOrder.setOrderId(washOrderId); openOrder.setUpdateTime(LocalDateTime.now()); openOrder.updateById()
解決方法二
實(shí)體上設(shè)置更新時(shí)間
public class TDZopenOrder { @ApiModelProperty("更新時(shí)間") @TableField(update = "now()") private LocalDateTime updateTime; }
推薦使用方法二,這樣不用每次都取設(shè)置更新時(shí)間,簡(jiǎn)化代碼!??!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何解決IDEA.properties文件中文亂碼問(wèn)題
這篇文章主要介紹了如何解決IDEA.properties文件中文亂碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Spring實(shí)現(xiàn)定時(shí)任務(wù)的兩種方法詳解
Spring提供了兩種方式實(shí)現(xiàn)定時(shí)任務(wù),一種是注解,還有一種就是接口了,這篇文章主要為大家介紹了這兩種方法的具體實(shí)現(xiàn)方法,需要的可以參考下2024-12-12Spring中@ExceptionHandler注解的工作原理詳解
這篇文章主要介紹了Spring中@ExceptionHandler注解的工作原理詳解,Spring Web注解@ExceptionHandler可以用來(lái)指定處理某類異常的控制器方法,從而在這些異常發(fā)生時(shí),會(huì)有相應(yīng)的控制器方法來(lái)處理此類異常,需要的朋友可以參考下2024-01-01SpringBoot 項(xiàng)目使用hutool 工具進(jìn)行 http 接口調(diào)用的處理方
在實(shí)際的開(kāi)發(fā)過(guò)程中一個(gè)互聯(lián)網(wǎng)的項(xiàng)目來(lái)說(shuō) ,有可能會(huì)涉及到調(diào)用外部接口的實(shí)際業(yè)務(wù)場(chǎng)景,下面通過(guò)本文給大家介紹SpringBoot 項(xiàng)目 使用hutool 工具進(jìn)行 http 接口調(diào)用的處理方法,需要的朋友可以參考下2022-06-06Mybatis?MappedStatement類核心原理詳解
這篇文章主要介紹了Mybatis?MappedStatement類,mybatis的mapper文件最終會(huì)被解析器,解析成MappedStatement,其中insert|update|delete|select每一個(gè)標(biāo)簽分別對(duì)應(yīng)一個(gè)MappedStatement2022-11-11Java 隊(duì)列實(shí)現(xiàn)原理及簡(jiǎn)單實(shí)現(xiàn)代碼
這篇文章主要介紹了Java 隊(duì)列實(shí)現(xiàn)原理及簡(jiǎn)單實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2016-10-10Spring Boot應(yīng)用配置常用相關(guān)視圖解析器詳解
這篇文章主要給大家介紹了關(guān)于Spring Boot應(yīng)用配置常用相關(guān)視圖解析器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12