四川鼎能建设集团网站,淘宝客网站如何做,企业产品营销策划推广,光电信息科学与工程排除非表字段的3种方式 常见编程场景#xff1a; 实体类中某个变量不对应数据库的表中的任何字段#xff0c;用于暂时保存临时数据或者通过某种方式计算或组装的数据。 文章目录一、举个栗子#xff1a;1.1 在User实体类中#xff0c;添加remark属性1.2 执行插入操作#… 排除非表字段的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 list1.4 问题定位
数据库中无remark字段列插入数据库时字段数量对应不上导致抛出异常
1.5 解决方案
二、针对以上场景MP提供了三种解决方案
2.1 第一种解决方案
2.1.1 在remark属性上添加transient 关键字
表明不参与序列化过程
/*第一种情况*/
private transient String remark;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不会生成 /*第二种情况*///备注 保存用于程序调用或者组装的数据在数据库中没有对应的字段private static String remark;public static String getRemark() {return remark;}public static void setRemark(String remark) {User.remark remark;}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 让我们一起进步