MyBatis-Plus_入门试炼03
排除非表字段的3種方式
常見編程場(chǎng)景:
實(shí)體類中某個(gè)變量不對(duì)應(yīng)數(shù)據(jù)庫(kù)的表中的任何字段,用于暫時(shí)保存臨時(shí)數(shù)據(jù)或者通過(guò)某種方式計(jì)算或組裝的數(shù)據(jù)。
文章目錄
- 一、舉個(gè)栗子:
- 1.1 在User實(shí)體類中,添加remark屬性
- 1.2 執(zhí)行插入操作:
- 1.3 異常信息:
- 1.4 問(wèn)題定位
- 1.5 解決方案
- 二、針對(duì)以上場(chǎng)景,MP提供了三種解決方案
- 2.1 第一種解決方案:
- 2.1.1 在remark屬性上添加transient 關(guān)鍵字
- 2.1.2 再次執(zhí)行插入成功:
- 2.1.3 控制臺(tái)輸出
- 2.2 第二種解決方案:
- 2.2.1 在remark屬性上添加static 關(guān)鍵字
- 2.2.2 再次執(zhí)行插入成功:
- 2.2.3 控制臺(tái)輸出
- 2.3 第三種解決方案(建議使用):
- 2.3.1 在remark屬性上添加@TableField注解
- 2.3.2 在此執(zhí)行插入成功:
- 2.3.3 控制臺(tái)輸出
一、舉個(gè)栗子:
1.1 在User實(shí)體類中,添加remark屬性
//備注 保存用于程序調(diào)用或者組裝的數(shù)據(jù),在數(shù)據(jù)庫(kù)中沒有對(duì)應(yīng)的字段 @Data @TableName("mp_user") public class User {//主鍵@TableIdprivate Long userId;//姓名@TableField("name")private String roleName;//年齡private Integer age;//郵箱private String email;//創(chuàng)建時(shí)間private LocalDateTime createTime;//備注 保存用于程序調(diào)用或者組裝的數(shù)據(jù),在數(shù)據(jù)庫(kù)中沒有對(duì)應(yīng)的字段private String remark; }1.2 執(zhí)行插入操作:
/*** 測(cè)試與數(shù)據(jù)庫(kù)無(wú)對(duì)應(yīng)字段*/@Testpublic void insertNoCorField() {User user = new User();user.setRoleName("gblfy");user.setAge(26);user.setCreateTime(LocalDateTime.now());user.setRemark("數(shù)據(jù)庫(kù)中無(wú)對(duì)應(yīng)字段");int rows = userMapper.insert(user);System.out.println("影響數(shù)據(jù)庫(kù)的條數(shù):" + 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 問(wèn)題定位
數(shù)據(jù)庫(kù)中無(wú)remark字段列,插入數(shù)據(jù)庫(kù)時(shí),字段數(shù)量對(duì)應(yīng)不上,導(dǎo)致拋出異常
1.5 解決方案
二、針對(duì)以上場(chǎng)景,MP提供了三種解決方案
2.1 第一種解決方案:
2.1.1 在remark屬性上添加transient 關(guān)鍵字
- 表明不參與序列化過(guò)程
2.1.2 再次執(zhí)行插入成功:
/*** 第一種解決方案:* * 添加transient關(guān)鍵字,不參與序列化過(guò)程* * 測(cè)試與數(shù)據(jù)庫(kù)無(wú)對(duì)應(yīng)字段*/@Testpublic void insertNoCorField() {User user = new User();user.setRoleName("gblfy");user.setAge(26);user.setCreateTime(LocalDateTime.now());user.setRemark("數(shù)據(jù)庫(kù)中無(wú)對(duì)應(yīng)字段");int rows = userMapper.insert(user);System.out.println("影響數(shù)據(jù)庫(kù)的條數(shù):" + rows);}2.1.3 控制臺(tái)輸出
上面加上transient 關(guān)鍵字,不參與序列化過(guò)程,但是,我需要參與序列化怎么辦呢?
2.2 第二種解決方案:
2.2.1 在remark屬性上添加static 關(guān)鍵字
- 表明時(shí)靜態(tài)的,需要手動(dòng)添加set和get方法,lombok不會(huì)生成
2.2.2 再次執(zhí)行插入成功:
/*** 第二種解決方案:** 1.添加static關(guān)鍵字* 2.表明remark屬性是靜態(tài)的* 3.可以用類名直接調(diào)用** 測(cè)試與數(shù)據(jù)庫(kù)無(wú)對(duì)應(yīng)字段*/@Testpublic void insertNoCorField2() {User user = new User();user.setRoleName("gblfy");user.setAge(26);user.setCreateTime(LocalDateTime.now());//用類名直接調(diào)用setRemark方法User.setRemark("數(shù)據(jù)庫(kù)中無(wú)對(duì)應(yīng)字段");int rows = userMapper.insert(user);System.out.println("影響數(shù)據(jù)庫(kù)的條數(shù):" + rows);}2.2.3 控制臺(tái)輸出
第二種 remark這個(gè)屬性想每個(gè)對(duì)象對(duì)應(yīng)一個(gè),應(yīng)該如何處理?
2.3 第三種解決方案(建議使用):
1.添加@TableField(exist = false)注解,并將exist設(shè)置為false,默認(rèn)為true 數(shù)據(jù)庫(kù)有此字段
2.表明remark屬性在數(shù)據(jù)庫(kù)是不存在的
2.3.1 在remark屬性上添加@TableField注解
/*第三種情況*/@TableField(exist = false)private String remark;2.3.2 在此執(zhí)行插入成功:
/*** 第三種解決方案:** 1.添加@TableField(exist = false)注解,并將exist設(shè)置為false,默認(rèn)為true 數(shù)據(jù)庫(kù)有此字段* 2.表明remark屬性在數(shù)據(jù)庫(kù)是不存在的** 測(cè)試與數(shù)據(jù)庫(kù)無(wú)對(duì)應(yīng)字段*/@Testpublic void insertNoCorField3() {User user = new User();user.setRoleName("gblfy");user.setAge(26);user.setCreateTime(LocalDateTime.now());//用類名直接調(diào)用setRemark方法user.setRemark("第三種情況_數(shù)據(jù)庫(kù)中無(wú)對(duì)應(yīng)字段");int rows = userMapper.insert(user);System.out.println("影響數(shù)據(jù)庫(kù)的條數(shù):" + rows);}2.3.3 控制臺(tái)輸出
想學(xué)習(xí)更多微服務(wù)、分布式、中間件、數(shù)據(jù)庫(kù)、項(xiàng)目快速構(gòu)建等系列技術(shù)
請(qǐng)?jiān)L問(wèn)http://gblfy.com
讓我們一起進(jìn)步!!!
總結(jié)
以上是生活随笔為你收集整理的MyBatis-Plus_入门试炼03的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何将本地代码推送至远程仓库
- 下一篇: 使用html2Canvas将页面转化为c