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
让我们一起进步!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SaaS路线图 | 时光机

戳蓝字“CSDN云计算”关注我们哦!时光机:搭载这部时光机,带您回顾《程序员》大量优秀文章,重温经典技术干货,我们发现硬核技术永不过时,对于get要点、solve难题、提高自我,仍有非凡意义。作者&a…

SpringCloud微服务如何优雅停机及源码分析 | 技术头条

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!作者:Trust_FreeDom转自:码农沉思录本文主要讨论的是微服务注册…

qt自定义行编辑器,用来加载颜色

提要 自定义行编辑器,点击后弹出颜色选择对话框,选择喜欢的颜色,确认后在行编辑器加载选中的颜色。 效果 选中某一个颜色后,行编辑器中加载所选的颜色。 示例 mylineedit.h #ifndef MYLINEEDIT_H #define MYLINEEDIT_H#inclu…

qt使用样式表设置窗口widget为圆角

提要 窗口widget是无法直接通过样式表设置为圆角的,需要在窗口QWidget中拖入控件QFrame,将QFrame设置的和窗口QWidget一样大小,将窗口QWidget中需要的控件拖入到QFrame中。 示例 下面是一个提示工具的窗口。通过它简单的记录一下样式表怎么…

微软 Build 2019:IE 重生,Azure 成主角;华为拟在英剑桥新建半导体研发基地,与ARM做邻居……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go阿联酋联邦政府人工智能部长 …

完美起点更重要:青立方超融合易捷版 助力企业一步云就绪

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!长跑,一项比短跑更具技术含量的运动,如果起跑过猛,…

没有一家公司可以逃避边缘计算 | 技术头条

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!作者: Ariane转自:边缘计算社区边缘计算正在为数据中心的世界添…

gblfy_IDEA常用快捷键技巧

文章目录一、IDEA常用快捷键1. 查找2. 注释3. 断点调试4. 复制/移动5. 提示二、为需要的菜单设置快捷键2.1. 先搜2.2. 后加三、查找快捷键对应的菜单/替换快捷键3.1. 先搜3.2. 再加3.3. 需移除一、IDEA常用快捷键 1. 查找 查找快捷键说明idea中对应菜单位置CTRLR当前文件替换…

甲骨文中国裁员已定,补偿为N+6;VMware联手云平台合作伙伴AsiaPac,闪耀狮城;对标英伟达,寒武纪新货曝光……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 乐视改乐融,重新…

5G精华问答 | 大数据和5G有什么关系?

戳蓝字“CSDN云计算”关注我们哦!即将到来的5G,通过提升连接速率,提升了“人联网”的感知,也促进了人类主动创造数据。另一方面,它更多是为“物联网”服务的。包括低延时、海量终端连接等,都是物联网场景的…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于概率预测与随机响应面法的新能源孤岛配电网实时风险评估与调控策略》

这个标题涉及到新能源孤岛配电网的实时风险评估与调控策略,其中使用了概率预测和随机响应面法。下面是对标题中各个要素的解读: 新能源孤岛配电网: 新能源: 指的是可再生能源,如太阳能、风能等,与传统的化石…

Open Infrastructure开启开放协作新时代

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!在丹佛举办的Open Infrastructure Summit大会的Keynote演讲中,OpenStack基…

图解分布式架构的发展和演进 | 技术头条

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!编注: 架构决定的系统的稳定性,扩展性和并发性,架构的演进是从…

Hadoop精华问答 | 如何设置单个任务占用的内存量和CPU数目?

我们很荣幸能够见证Hadoop十年从无到有,再到称王。感动于技术的日新月异时,让我们再来看看关于Hadoop的精华问答。1Q:默认情况下,各个节点的负载不均衡(任务数目不同),有的节点很多任务在跑&…

MyBatis-Plus_自定义sql

查询专栏:自定义查询sql 文章目录1. 在mapper接口中定义接口2. 在xml文件中书写sql3. 全局配置3.1 配置xml的位置3.2 配置实体类的位置4. 在实体类中测试5. 控制台输出1. 在mapper接口中定义接口 /*** 查询所有 有条件会自动拼接在where 后边当条件 单表操作** pa…

Gartner:PaaS 和平台架构领域的 4 大趋势 | 技术头条

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!Gartner公司已列出了2019年及以后影响平台即服务(PaaS)技术和平…

MyBatis-Plus_分页查询

查询专栏:myabtis 实现的分页为什么还要分页插件? 文章目录1. 创建分页插件2. 测试分页3. 自定义分页4. 测试自定义分页方法5. 控制台输出6. 多表操作1. 创建分页插件 Configuration public class MybatisPlusConfig {Beanpublic PaginationInterceptor…

qt设置滚动区域的滚动条的样式

引言 当窗口的控件太多,不能一下完全显示,就可以采用滚动区域来添加控件,这样添加的控件,可以通过滑动滚动区域的滚动条来浏览所有的控件。下面就大致记录一下滚动区域的滚动条的样式怎么设置。 实现 直接上设置滚动区域的滚动…

什么叫云原生应用?| 技术头条

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!作者:吕建伟转自:阿朱说(1)从Function到…

500位开发者要在杭州搞事情!CTA峰会嘉宾全阵容揭秘

戳蓝字“CSDN云计算”关注我们哦!扫描二维码,立享折扣。5 月 26 日- 5 月 27 日,由中国 IT 社区 CSDN 与数字经济人才发展中心联合主办的第一届 CTA 核心技术及应用峰会将在杭州国际博览中心召开。首届 CTA 核心技术及应用峰会将围绕人工智能…