mybatis plus新增(insert)数据获取主键id的问题
作者:Rookie_cc 发布时间:2023-08-09 10:50:52
标签:mybatis,plus,insert,主键id
mybatis plus新增(insert)数据获取主键id
在我们执行insert操作的时候,往往会需要拿到新插入数据的主键id做下一步操作。
例:
//新增银行卡
BankCard bankCard = new BankCard();
bankCard.setBankCardRealName(bankCardRequest.getRealName());
bankCard.setBankCardNum(bankCardRequest.getBankCardNum());
bankCard.setBankName(bankCardRequest.getBankName());
int index = bankCardMapper.insert(bankCard);
这里insert之后返回的index实际是你增加的数据列数,并不是主键id。
要想获取主键id,只需要在insert之后直接get该对象的主键id即可
例:
//新增银行卡
BankCard bankCard = new BankCard();
bankCard.setBankCardRealName(bankCardRequest.getRealName());
bankCard.setBankCardNum(bankCardRequest.getBankCardNum());
bankCard.setBankName(bankCardRequest.getBankName());
bankCardMapper.insert(bankCard);
Long id = bankCard.getId();
mybatis plus坑之insert方法
有天早上我的一个同事,突然跑来告诉我。我们某张表的自增ID变得很大。类似1173776258468638722 这种。这个当然是不能接受的啊。
着手解决
然后就开始找问题的原因,一开始我想的是数据库上的问题,我删掉不合理的数据,
alter table *** AUTO_INCREMENT=20,修改自增ID从20开始。手动插入数据,居然OK。
那就说明,可能是我们代码insert数据的时候存在的问题。我找到数据库访问层的insert语句处,发现使用的是mybatis-plus,网上查了一下关于这块的东西,发现insert方法在配置的时候,可以指定自增ID的方式。
源码中定义有以下几种:
public enum IdType {
AUTO(0, "数据库ID自增"),
INPUT(1, "用户输入ID"),
ID_WORKER(2, "全局唯一ID"),
UUID(3, "全局唯一ID"),
NONE(4, "该类型为未设置主键类型"),
ID_WORKER_STR(5, "字符串全局唯一ID");
然后我就果断手动配置了一下,
@TableId(type = IdType.AUTO)
private Long userId;
重启测试,OK。
也是很奇怪为什么之前的那部分数据的自增ID都是没问题的,突然出现这个,也是很困惑
出现这个问题的原因,还是因为自己技术不熟练啦~~
来源:https://blog.csdn.net/Rookie_cc/article/details/106664347


猜你喜欢
- 问题(1)重入锁是什么?(2)ReentrantLock如何实现重入锁?(3)ReentrantLock为什么默认是非公平模式?(4)Ree
- java 中String.equals和==的比较 初学java有段时间了,但是昨晚忽然就被"asd&quo
- 本文实例为大家分享了JAVA实现人脸识别的具体代码,供大家参考,具体内容如下官方下载 安装文件 ,以win7为例,下载opencv-2.4.
- package dao;import java.sql.*;public class BaseDao { //oracle//&n
- 本文实例讲述了Android编程重写ViewGroup实现卡片布局的方法。分享给大家供大家参考,具体如下:实现效果如图:实现思路1. 重写o
- 本文实例为大家分享了Flutter投票组件的使用方法,供大家参考,具体内容如下前景基于公司项目需求,仿照微博实现投票功能。开发遇到的问题1.
- 本文实例讲述了C#判断一天、一年已经过了百分之多少的方法。分享给大家供大家参考。具体如下:这里写了四个函数,分别是1.判断当前时间过了今天的
- 目录单一职责原则接口隔离原则开闭原则里氏替换原则依赖倒置原则迪米特法则笔者作为一个菜鸟,会尝试以简单的代码和容易理解的语句去解释这几种原则的
- 本文通过C#程序代码展示如何给PDF文档添加可视化数字签名和不可见数字签名。可视化数字签名,即在PDF文档中的指定页面位置添加签名,包含相关
- 基本概念 * (Listener): * 用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处
- 在做android 开发时,在默认情况下当屏幕从竖评变到横屏时会触发 onConfigurationChanged 事件 在默认情况下会重新
- 本文实例讲述了C#实现客户端弹出消息框封装类。分享给大家供大家参考。具体如下:asp.net在服务器端运行,是不能在服务器端弹出对话框的,但
- 一、问题提出对于线段树,若要求对区间中的所有点都进行更新,可以引入懒操作。懒操作包括区间更新和区间查询操作。二、区间更新对 [l,r] 区间
- 最近学习Spring的源码,发现一个利器BeanPostProcessor。这个后置处理器可以在bean初始化前后对bean进行操作。我们可
- 我们肯定遇到过打开别人的项目时一直处于Building‘XXX'Gradle project info的情况。本文通过两种方法带领大
- 前言最近在用 MVP + RxJava + Retrofit 写项目,觉得相对于其他的开发框架,这的确是给我们带来了很多方便,但是在网上搜寻
- C++ 前置声明详解及实例【1】一般的前置函数声明见过最多的前置函数声明,基本格式代码如下:#include <iostream>
- MyBatis核心配置文件<?xml version="1.0" encoding="UTF-8&quo
- 本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下实现思路:首先说下布局,整个是一个横向的线性
- jedis是redis的java客户端,spring将redis连接池作为一个bean配置。redis连接池分为两种,一种是“redis.c