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 关键字
- 表明不参与序列化过程
/*第一种情况*/
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
让我们一起进步!!!
MyBatis-Plus_入门试炼03相关推荐
- 第七篇:Spring Boot整合Thymeleaf_入门试炼03
基本语法实战案例01 在ThymeleafController中添加此方法 @RequestMapping("/show5")public String showInfo5(Mod ...
- 第十篇:Spring Boot整合mybatis+Mysql 入门试炼02
前言: 1.(SprigBoot整合SpringMVC+Mybatis) 2.以thymeleaf作为视图层技术整合 3.springboot版本2.0.5.RELEASE 创建项目 1.添加依赖及启 ...
- Guns 查询列表_入门试炼03
一.插入数据进行测试: INSERT INTO `guns`.`sys_house` (`id`, `house_user`, `house_address`, `house_date`, `hous ...
- Centos7 Docker容器操作_入门试炼03
文章目录 一.容器常用命令 二.查看容器 2.1. 查看正在运行容器 2.2. 查看所有的容器(启动过的历史容器) 2.3. 查看最后一次运行的容器 2.4. 查看停止的容器 三.容器创建和运行 3. ...
- Jenkins_安装基础软件_入门试炼03
应用部署服务器准备: 本章对Linux系统简介.安装Java环境.安装并配置 Git.安装并配置 Maven.安装并配置 Tomcat.以及将部署服务器配置到Jenkins上. 一.Linux操作系统 ...
- 第九篇:Spring Boot整合Spring Data JPA_入门试炼03
CrudRepository接口的使用 CrudRepository接口,主要完成一些增删改查的操作. 注意:CrudRepository接口继承Repository接口 1.持久层接口: packa ...
- c++框架有哪些_Java Mybatis框架入门教程_v20200726
MyBatis 的前身是 Apache 的开源项目 iBatis.MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的基于 Java 的优秀持久层框架.MyBat ...
- MyBatis学习总结(1)——MyBatis快速入门
2019独角兽企业重金招聘Python工程师标准>>> 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所 ...
- MyBatis基础入门《九》ResultMap自动匹配
MyBatis基础入门<九>ResultMap自动匹配 描述: Mybatis执行select查询后,使用ResultMap接收查询的数据结果. 实体类:TblClient.java 接口 ...
最新文章
- 图论中的知识点(等待补充和更新)
- 汇编语言--sbb指令
- 源码安装python
- 一组匹配中国大陆手机号的正则表达式
- 后端传到前端的字符串如何在pre标签中实现换行
- Python Numpy中transpose()函数的使用
- uniapp调用c语言方法,uni-app 入坑指南-web开发
- java day43【Filter:过滤器 、Listener:监听器】
- 基于91助手实现80/54坐标转换到2000大地坐标的七参数计算
- multsim 函数发生器的使用
- 计算机组成原理:原,反,补码,加减运算,溢出判断,符号扩展
- 烤仔的朋友们 | 细数11位身价超十亿美元加密富豪,灰度创始人仅排第七
- iPhone备忘录删了怎么恢复?恢复备忘录的两大方法!
- 巧用天翼云盘备份云主机数据
- android canvas画图gc,自定义控件绘图(Canvas,Paint,Region等)篇一
- 《ESP32》Adafruit_GFX、u8g2驱动ssd1306
- 自动绘制公路工程纵断面的AutoLisp程序
- 人工智能--语义网络表示法
- Kafka手动提交偏移量的作用到底是什么???
- 我烧的第一个菜-酸辣土豆丝
热门文章
- 《碟中谍5》中惊鸿一瞥的步态识别技术,究其神在哪里?
- oracle dba_waiters中的lockid是什么,查杀oracle lock session and table
- 【使用注意】文件内容突然消失
- FileOutputStream为false时候注意的问题
- 【转载保存】Java丨jsoup网络爬虫登录得到cookie并带上cookie访问
- CDH 配置YARN动态资源池的计划模式,根据时间划分资源,不同时间不同队列使用不同资源
- Oracle数据到MaxCompute乱码问题详解
- MaxCompute在电商场景中如何进行漏斗模型分析
- 聚焦数字化智慧安防的新型社区
- Sentinel 成为 Spring Cloud 官方推荐的主流熔断降级方案