Mybatis-plus插入后返回元素id的问题

目录
  • mybatis-plus插入后返回插入元素的id
    • 1.mybatis原生
    • 2.使用mybatis-plus注解
    • 3.使用mybatis-plus提供的insert
  • Mybatis-plus设置id自增,插入数据
    • 没修改前
    • 所以修改后
  • 总结

mybatis-plus插入后返回插入元素的id

有三种方法,第三种最简单。

不想麻烦的直接看第三种

1.mybatis原生

mybaits-plus要使用mybatis原生需要一下配置,指定下mapper文件的位置就好

mybatis-plus:
  mapper-locations: classpath*:mapperxml/*Mapper.xml

直接先看mapper.xml文件,这个insert语句实际上就是插入MouldMessage这个我定义的实体类。

<mapper namespace="com.hwz.MessageMouldMapper">
    <insert id="testInsert" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO t_XXXX
        XXXXXX,XXXX,XXXXX
        VALUES XXXX,XXXX,XXXX
    </insert>
</mapper>

userGenerateKeys告诉mybatis使用自增主键,keyProperty指定这个主键名称叫id。

然后再mapper接口定义这个方法

Long testInsert(MessageMould messageMould);

调用这个插入语句,information这个实例时没有定义id,创建时间这些字段的,输出结果是数据表修改条数,这里插入一条,所以返回1。

System.out.println(messageMouldMapper.testInsert(information)+“----”);

然后这时候我们输出下information的一些属性,发现本来作为参数的information被mybatis自动填充上了id和创建时间

System.out.println(information.getId()+“*******”+information.getCreateTime());

所以结论就是,插入之后找传入的参数,就能找到新增加元素的id

2.使用mybatis-plus注解

其实跟原生mybatis一样,插入后元素的id会直接映射到参数中,只不过用注解代替了mapper.xml文件

@Insert(value = "INSERT INTO t_XXXX" +
        "XXX,XXX,XXX " +
        "VALUES (XXX,XXX,XXX)")
@SelectKey(statement="select LAST_INSERT_ID()",keyProperty = "id",before = false,resultType = Long.class)
Integer testInsert1(MessageMould messageMould);

执行完这条insert操作后,直接拿形参messageMould的id,就能拿到id

3.使用mybatis-plus提供的insert

mybatis只要extends BaseMapper就可以调用他的insert方法。其实也就跟上面2个一样。i调用insert(MessageMould messageMould)后,id会映射到形参messageMould中,直接拿形参messageMould的id,就能拿到id

Mybatis-plus设置id自增,插入数据

没修改前

这是我的实体类。

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Company {
  private Integer id;
  private String cid;
  private String cname;
  private String address;
  private String representation;
  private String phone;
  private String email;
  private String weburl;
  private String introductory;
}

我的数据库设置的是id自增。 添加数据时没有加上id的数据。

然后报错

Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@59238b99]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3cc8aa87] was not registered for synchronization because synchronization is not active
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3cc8aa87]
2021-11-07 14:28:06.789 ERROR 5620 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'id' of 'class com.dk.pojo.Company' with value '1457233381002637313' Cause: java.lang.IllegalArgumentException: argument type mismatch] with root cause

查询得知,当时实体中,plus主键生成方式不设置生成方式时,默认的是自增。而且生成的值就如报错中的‘1457233381002637313’很长的一个值。

而主键的设置类型有:

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 Integer id;

这样的修改跟修改前一样。我们需要的是12、13这样的序列,所以需要设置id生成方式,就需要在注解设置value的值。

@TableId(value = “id”, type = IdType.AUTO)
private Integer id;

这样指定id的值,我们在用plus插件insert时就不用插入id的值。生成的id值跟数据库对应。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis插入数据后如何返回新增数据的id值

    目录 1.自增主键情况下插入数据获取自增主键值 2.主键非自增的情况下获取主键值 3.keyColumn作用 总结 1.自增主键情况下插入数据获取自增主键值 mybatis为我们提供了一个方法,能够插入数据时获取自动生成的值,并且把取的值赋值给实体类的某一属性 设置方法: 要求:主键必须是自增的 <insert id = "insert" useGeneratedKeys = "true" keyProperty = "id">  

  • Mybatis-plus出现数据库id很大或者为负数的解决

    目录 问题复原 原因 如何解决 小结 问题复原 原因 数据库设置了自增主键 但是代码没有设置TableId 然后在新增的时候就出现了id很大或者负数. 如何解决 代码设置TableId @TableId(value = "id", type = IdType.AUTO) private Integer id; 设置数据库连接 重启后台 把这个改成正常的数字,删除原来的数据,然后设置成1,或者改成目前最大的一个数字,比如正常的是最大为2,现在设置成3. 然后就数据库就正常了! 小结 以上

  • Mybatis执行插入语句后并返回主键ID问题

    目录 1.MySQL数据库设置ID自增情况 2.使用UUID自增主键 3.mybatis-plus在执行插入语句后返回自定义ID 总结 我们知道JDBC可以实现插入语句后返回主键Id,那mybatis可以实现吗? 答案是肯定的. 1.MySQL数据库设置ID自增情况 <insert id="insertUser" parameterType="com.crush.mybatisplus.entity.User"> INSERT INTO tb_user

  • Mybatis-plus插入后返回元素id的问题

    目录 mybatis-plus插入后返回插入元素的id 1.mybatis原生 2.使用mybatis-plus注解 3.使用mybatis-plus提供的insert Mybatis-plus设置id自增,插入数据 没修改前 所以修改后 总结 mybatis-plus插入后返回插入元素的id 有三种方法,第三种最简单. 不想麻烦的直接看第三种 1.mybatis原生 mybaits-plus要使用mybatis原生需要一下配置,指定下mapper文件的位置就好 mybatis-plus:  

  • postgresql插入后返回id的操作

    如下所示: 补充:PostgreSQL中执行insert同时返回插入的那行数据 通过使用语句: INSERT INTO tab1 ... RETURNING *; 以上这篇postgresql插入后返回id的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Mybatis批量插入并返回主键id的方法

    目录 场景 错误 分析原因 排查问题 场景 在做商城的时候,sku表进行了拆分,sku的基本信息以及sku的库存表.因为库存会经常的变动,会导致行锁. 这里就是新增的时候,因为在新增商品的时候,会有多条sku的数据进行批量的插入,那么有批量插入sku基本信息以及批量插入sku的库存信息. 其中,就需要批量插入sku的基本信息的时候,返回主键id,这就能够在sku批量插入库存信息的时候能够插入skuId: 错误 nested exception is org.apache.ibatis.execu

  • Mybatis批量插入数据返回主键的实现

    响应效果(id为主键): { "data": [ {"studentName": "张三","classNo": "一班","id": 111}, {"studentName": "李四","classNo": "二班","id": 112}, {"studentName&quo

  • 详解Java MyBatis 插入数据库返回主键

    最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User(); user.setUserName("chenzhou"); user.setPassword("xxxx"); user.setComment("测试插入数据返回主键功能"); System.out.println("插入前主键为:

  • mybatis实现批量插入并返回主键(xml和注解两种方法)

    目录 mybatis批量插入并返回主键(xml和注解两种方法) mybatis批量插入 xml形式 注解形式 mybatis批量插入并返回主键笔记 mapper中的代码 xml中的代码,collection必须填list类型 mybatis批量插入并返回主键(xml和注解两种方法) mybatis批量插入 在mysql数据库中支持批量插入,所以只要配置useGeneratedKeys和keyProperty就可以批量插入并返回主键了. 比如有个表camera,里面有cameraNo,chanIn

  • Mybatis批量插入更新xml方式和注解方式的方法实例

    前言 最近工作上遇到很多批量插入的场景,但是百度很难得到我想要的结果,而且查出来的效果不是很好- 所以就自己来写一份给大家参考,希望对大家有用 Mybatis 批量插入注解形式 @Insert("<script> INSERT INTO t_device_policy " + "(id,device_id,type,policy,create_time,update_time) " + "VALUES " + "<fo

  • 详解mybatis插入数据后返回自增主键ID的问题

    1.场景介绍: ​开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后返回的是插入成功的条数,那么这个时候我们想要得到相应的这条新增数据的ID,该怎么办呢? 2.插入数据返回自增主键ID方法(一) 在映射器中配置获取记录主键值xml映射: 在xml中定义useGeneratedKeys为true,返回主键id的值,keyProperty和keyColumn分别代表数据库

  • Mybatis批量插入返回插入成功后的主键id操作

    我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1.对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty ,<insert>标签属性. 2.不支持生成自增主键的数据库:使用<selectKey>. 但是怎么对批量插入数据返回自增主键的解决方式网上看到的还是比较少,至少百度的结果比较少. Mybatis官网资料提供如下: First, if your database supports auto-generated key

随机推荐