MyBatis-Plus不使用數據庫默認值的問題及解決
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>
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Mybatis-Plus自動填充更新操作相關字段的實現
- MyBatisPlus使用@TableField註解處理默認填充時間的問題
- MP(MyBatis-Plus)實現樂觀鎖更新功能的示例代碼
- 關於Mybatis-Plus Update更新策略問題
- Mybatis plus通用字段自動填充的示例