MyBatis-Plus中MetaObjectHandler沒(méi)生效完美解決
Mybatisplus自動(dòng)填充功能失效
通過(guò)SpringBoot框架集成 mybatis-plus首先導(dǎo)入需要的依賴
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
在appication.yml添加相關(guān)配置
mybatis-plus configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl//打印sql語(yǔ)句
mapper-locations: com/example/mapper/xml/*.xml // 配置mapper的掃描,找到所有的mapper.xml映射文件
創(chuàng)建實(shí)體類對(duì)象
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrderMaster implements Serializable {
@TableId(type = IdType.ASSIGN_UUID)//自動(dòng)生成
private String orderId;
private String Name;
private String Phone;
private String Address;
/**
* 創(chuàng)建時(shí)間
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 修改時(shí)間
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
按照官方文檔進(jìn)行配置
要記得添加@Component注解
@Component
//自動(dòng)填充配置
public class FillHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("開(kāi)始填充時(shí)間");
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.setFieldValByName("updateTime", LocalDateTime.now(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", LocalDateTime.now(),metaObject);
}
}
正常來(lái)說(shuō)到了這一步,一般情況下就好了常見(jiàn)的錯(cuò)誤有這幾種
- 日期類不一致導(dǎo)致 創(chuàng)建日期、更新日期 為 null
- @Component 沒(méi)有被掃到,可以看下啟動(dòng)類的位置,啟動(dòng)類掃描的包是在其所在包以下的包
- 還有就是填充的字段屬性不一致,比如Date和LocalDateTime
- 檢查MetaObjectHandler實(shí)現(xiàn)類是否使用@Component
- 實(shí)體類字段使用注解 @TableField(fill = FieldFill.INSERT)
可惜我的問(wèn)題不是以上幾種,于是我打了斷點(diǎn),發(fā)現(xiàn)根本沒(méi)有執(zhí)行到 MetaObjectHandler的實(shí)現(xiàn)類=>FillHandler于是我輸出了所有的bean,發(fā)現(xiàn)MetaObjectHandler并沒(méi)有注入進(jìn)去。
這里的原因在于mybatis有自己默認(rèn)的配置文件,所以我們自定義的沒(méi)有生效,自定義Bean sqlSessionFactory 影響到了 globalConfig ,導(dǎo)致配置失效。
添加這樣一個(gè)配置類即可
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.example.handler.FillHandler;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class sqlSessionFactory {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
//獲取mybatis-plus全局配置
GlobalConfig globalConfig = GlobalConfigUtils.defaults();
//mybatis-plus全局配置設(shè)置元數(shù)據(jù)對(duì)象處理器為自己實(shí)現(xiàn)的那個(gè)
globalConfig.setMetaObjectHandler(new FillHandler());
mybatisSqlSessionFactoryBean.setDataSource(dataSource);
//mybatisSqlSessionFactoryBean關(guān)聯(lián)設(shè)置全局配置
mybatisSqlSessionFactoryBean.setGlobalConfig(globalConfig);
return mybatisSqlSessionFactoryBean.getObject();
}
}
到這里就終于好了,這個(gè)問(wèn)題困擾了我一整天,終于解決了!
到此這篇關(guān)于MyBatis-Plus中MetaObjectHandler沒(méi)生效完美解決的文章就介紹到這了,更多相關(guān)MyBatis-Plus MetaObjectHandler沒(méi)生效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Mybatis-Plus3.2.0 MetaObjectHandler 無(wú)法進(jìn)行公共字段全局填充
- mybatisplus?實(shí)現(xiàn)接口MetaObjectHandler自動(dòng)填充字段值
- MybatisPlus的MetaObjectHandler與@TableLogic使用
- mybatisPlus如何使用MetaObjectHandler對(duì)字段進(jìn)行更新
- mybatis?plus?MetaObjectHandler?不生效的解決
- 解決mybatisplus MetaObjectHandler 失效的問(wèn)題
- MyBatis-Plus MetaObjectHandler的原理及使用
相關(guān)文章
在IDEA中配置Selenium和WebDriver的具體操作
在自動(dòng)化測(cè)試領(lǐng)域Selenium是一款非常流行的開(kāi)源工具,它支持多種瀏覽器,并提供了豐富的API供開(kāi)發(fā)者使用,而WebDriver則是Selenium的一個(gè)重要組件,它負(fù)責(zé)驅(qū)動(dòng)瀏覽器執(zhí)行測(cè)試腳本,這篇文章主要給大家介紹了在IDEA中配置Selenium和WebDriver的具體操作,需要的朋友可以參考下2024-10-10
MyBatis中調(diào)用存儲(chǔ)過(guò)程和函數(shù)的實(shí)現(xiàn)示例
在MyBatis中調(diào)用存儲(chǔ)過(guò)程和函數(shù)是一個(gè)相對(duì)高級(jí)的特性,本文主要介紹了MyBatis中調(diào)用存儲(chǔ)過(guò)程和函數(shù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
OPENCV+JAVA實(shí)現(xiàn)人臉識(shí)別
這篇文章主要為大家詳細(xì)介紹了OPENCV+JAVA實(shí)現(xiàn)人臉識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
SpringBoot中Redisson延遲隊(duì)列的示例
延時(shí)隊(duì)列是一種常見(jiàn)的需求,延時(shí)隊(duì)列允許我們延遲處理某些任務(wù),本文主要介紹了Redisson延遲隊(duì)列的示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
Java多線程知識(shí)點(diǎn)全面總結(jié)
這篇文章主要介紹了Java多線程知識(shí)點(diǎn)全面總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
SpringBoot框架aop切面的execution表達(dá)式解讀
這篇文章主要介紹了SpringBoot框架aop切面的execution表達(dá)式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
java如何自動(dòng)補(bǔ)齊數(shù)值至指定位數(shù)
這篇文章主要介紹了java如何自動(dòng)補(bǔ)齊數(shù)值至指定位數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
詳解Spring中singleton?bean如何同時(shí)服務(wù)多個(gè)請(qǐng)求
這篇文章主要介紹了詳解Spring中singleton?bean如何同時(shí)服務(wù)多個(gè)請(qǐng)求2023-02-02

