MyBatis-Plus_入门试炼03
生活随笔
收集整理的這篇文章主要介紹了
MyBatis-Plus_入门试炼03
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
排除非表字段的3種方式
常見編程場景:
實體類中某個變量不對應數據庫的表中的任何字段,用于暫時保存臨時數據或者通過某種方式計算或組裝的數據。
文章目錄
- 一、舉個栗子:
- 1.1 在User實體類中,添加remark屬性
- 1.2 執行插入操作:
- 1.3 異常信息:
- 1.4 問題定位
- 1.5 解決方案
- 二、針對以上場景,MP提供了三種解決方案
- 2.1 第一種解決方案:
- 2.1.1 在remark屬性上添加transient 關鍵字
- 2.1.2 再次執行插入成功:
- 2.1.3 控制臺輸出
- 2.2 第二種解決方案:
- 2.2.1 在remark屬性上添加static 關鍵字
- 2.2.2 再次執行插入成功:
- 2.2.3 控制臺輸出
- 2.3 第三種解決方案(建議使用):
- 2.3.1 在remark屬性上添加@TableField注解
- 2.3.2 在此執行插入成功:
- 2.3.3 控制臺輸出
一、舉個栗子:
1.1 在User實體類中,添加remark屬性
//備注 保存用于程序調用或者組裝的數據,在數據庫中沒有對應的字段 @Data @TableName("mp_user") public class User {//主鍵@TableIdprivate Long userId;//姓名@TableField("name")private String roleName;//年齡private Integer age;//郵箱private String email;//創建時間private LocalDateTime createTime;//備注 保存用于程序調用或者組裝的數據,在數據庫中沒有對應的字段private String remark; }1.2 執行插入操作:
/*** 測試與數據庫無對應字段*/@Testpublic void insertNoCorField() {User user = new User();user.setRoleName("gblfy");user.setAge(26);user.setCreateTime(LocalDateTime.now());user.setRemark("數據庫中無對應字段");int rows = userMapper.insert(user);System.out.println("影響數據庫的條數:" + rows);}1.3 異常信息:
org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: java.sql.SQLSyntaxErrorException: Unknown column 'remark' in 'field list' ### The error may exist in com/gblfy/mp/mybatisplus/samplesquickstart/mapper/UserMapper.java (best guess) ### The error may involve com.gblfy.mp.mybatisplus.samplesquickstart.mapper.UserMapper.insert-Inline ### The error occurred while setting parameters ### SQL: INSERT INTO mp_user ( user_id, name, age, create_time, remark ) VALUES ( ?, ?, ?, ?, ? ) ### Cause: java.sql.SQLSyntaxErrorException: Unknown column 'remark' in 'field list' ; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column 'remark' in 'field list'1.4 問題定位
數據庫中無remark字段列,插入數據庫時,字段數量對應不上,導致拋出異常
1.5 解決方案
二、針對以上場景,MP提供了三種解決方案
2.1 第一種解決方案:
2.1.1 在remark屬性上添加transient 關鍵字
- 表明不參與序列化過程
2.1.2 再次執行插入成功:
/*** 第一種解決方案:* * 添加transient關鍵字,不參與序列化過程* * 測試與數據庫無對應字段*/@Testpublic void insertNoCorField() {User user = new User();user.setRoleName("gblfy");user.setAge(26);user.setCreateTime(LocalDateTime.now());user.setRemark("數據庫中無對應字段");int rows = userMapper.insert(user);System.out.println("影響數據庫的條數:" + rows);}2.1.3 控制臺輸出
上面加上transient 關鍵字,不參與序列化過程,但是,我需要參與序列化怎么辦呢?
2.2 第二種解決方案:
2.2.1 在remark屬性上添加static 關鍵字
- 表明時靜態的,需要手動添加set和get方法,lombok不會生成
2.2.2 再次執行插入成功:
/*** 第二種解決方案:** 1.添加static關鍵字* 2.表明remark屬性是靜態的* 3.可以用類名直接調用** 測試與數據庫無對應字段*/@Testpublic void insertNoCorField2() {User user = new User();user.setRoleName("gblfy");user.setAge(26);user.setCreateTime(LocalDateTime.now());//用類名直接調用setRemark方法User.setRemark("數據庫中無對應字段");int rows = userMapper.insert(user);System.out.println("影響數據庫的條數:" + rows);}2.2.3 控制臺輸出
第二種 remark這個屬性想每個對象對應一個,應該如何處理?
2.3 第三種解決方案(建議使用):
1.添加@TableField(exist = false)注解,并將exist設置為false,默認為true 數據庫有此字段
2.表明remark屬性在數據庫是不存在的
2.3.1 在remark屬性上添加@TableField注解
/*第三種情況*/@TableField(exist = false)private String remark;2.3.2 在此執行插入成功:
/*** 第三種解決方案:** 1.添加@TableField(exist = false)注解,并將exist設置為false,默認為true 數據庫有此字段* 2.表明remark屬性在數據庫是不存在的** 測試與數據庫無對應字段*/@Testpublic void insertNoCorField3() {User user = new User();user.setRoleName("gblfy");user.setAge(26);user.setCreateTime(LocalDateTime.now());//用類名直接調用setRemark方法user.setRemark("第三種情況_數據庫中無對應字段");int rows = userMapper.insert(user);System.out.println("影響數據庫的條數:" + rows);}2.3.3 控制臺輸出
想學習更多微服務、分布式、中間件、數據庫、項目快速構建等系列技術
請訪問http://gblfy.com
讓我們一起進步!!!
總結
以上是生活随笔為你收集整理的MyBatis-Plus_入门试炼03的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将本地代码推送至远程仓库
- 下一篇: IDEA快速 实现 SpringMVC