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…

qt将光标相对于桌面的位置转换为相对于窗口的位置

提要 鼠标光标获取的位置cursor().pos()是相对于整个屏幕坐标的,鼠标进入窗口的范围内,判断光标是否在窗口中某控件的范围内,就需先将相对于整个电脑屏幕的鼠标位置,转换为相对于当前程序的窗口的位置,然后判断这个坐…

MyBatisPlus_通用service篇_入门试炼_05

文章目录1. service和impl2. 实战1. service和impl package com.gblfy.springboot.mybatisplus.service;import com.baomidou.mybatisplus.extension.service.IService; import com.gblfy.springboot.mybatisplus.entity.User;public interface UserService extends IService&…

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

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

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

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

MyBatisPlus_AR篇_入门试炼_06

文章目录1. 实体类2. 实战1. 实体类 原则:继承Model package com.gblfy.springboot.mybatisplus.entity;import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.exten…

MyBatisPlus_更新篇_入门试炼_03

文章目录1. 实战更新1. 实战更新 package com.gblfy.springboot.mybatisplus.mapper;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.co…

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

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

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

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

qt获取当前场景中的所有图形项的层次

提要 场景中有多个窗口,窗口处于不断更新中,获取场景中当前所有窗口的图层。由于特定的结构,这里场景中的窗口采用自定义窗口,将该自定义窗口作为自定义代理窗口的窗口,图形项作为自定义代理窗口的父窗口,…

MyBatisPlus_删除篇_入门试炼_04

文章目录1. 实战删除1. 实战删除 package com.gblfy.springboot.mybatisplus.mapper;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybati…

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

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

MyBatis-Plus_查询进阶01

select语句中不列出全部字段 文章目录1. 形式12. 形式21. 形式1 /*** 1. 名字包含雨并且年齡小于40* sql&#xff1a;name like %雨% and age < 40*/Testpublic void selectByWrapperSupper() {QueryWrapper<User> queryWrapper new QueryWrapper<>(); // …

qt中处理精度丢失

提要 定义的qreal类型的变量在做减法和乘法时所得的值不正确。 示例 做减法运算 //参数定义 qreal m_lastScale;//上一次缩放比 qreal m_scale;//保存缩放比m_scale m_lastScale - 0.05;//变为减0.05后计算的值不对下面的方法可以解决精度丢失导致的计算所得的值不正确的问…

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

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

Qt实现浮动窗口

提要 在窗口上悬浮鼠标&#xff0c;此时窗口标题栏显示&#xff0c;窗口变大&#xff0c;鼠标移开后&#xff0c;窗口恢复原来的大小&#xff0c;标题栏隐藏。 示例 直接上代码&#xff0c;只包含只要的代码部分。 在自定义的窗口中重写鼠标进入事件enterEvent和鼠标离开事件…

gblfy_IDEA常用快捷键技巧

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

qt编写触摸事件的关键

提要 无论你的电脑是支持触摸屏&#xff0c;还是你通过usb外部连接触摸屏&#xff0c;都能验证你的触摸程序功能。下面说说程序中使用触摸按钮等。 示例 按钮可以实现触摸功能&#xff1b;自动义控件可以实现触摸按下拖动&#xff1b;触摸长按出现对话框&#xff08;也可以是…

MyBatis-Plus_查询进阶05

查询专栏&#xff1a;select语句中不列出全部字段 文章目录1. 第一种形式2. 第二种形式1. 第一种形式 通过queryWrapper调用select方法&#xff0c;在select方法中添加需要查询的列 /*** 1. 名字包含雨并且年齡小于40* sql&#xff1a;name like %雨% and age < 40*/Testp…

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

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