当前位置: 代码网 > it编程>编程语言>Java > Springboot+MyBatis插入语句返回主键id的问题(插入后返回主键id不是期望的值)

Springboot+MyBatis插入语句返回主键id的问题(插入后返回主键id不是期望的值)

2026年08月04日 Java 我要评论
前言今天在使用mybatis的时候插入了一条数据,记得增加上这段配置(这里展示mybatis的注解形式)可以获取到插入数据库中这条数据的id值,但是返回的int id 为1。实际检查数据库中是插入成功

前言

今天在使用mybatis的时候插入了一条数据,记得增加上这段配置(这里展示mybatis的注解形式)可以获取到插入数据库中这条数据的id值,但是返回的int id 为1。

实际检查数据库中是插入成功了,并且id值也是正确的。

@options(usegeneratedkeys = true, keyproperty = "id")

所以去测试了一下,详细记录一下。

下面分别展示注解开发,和xml映射的两种方式代码。

业务代码:

                    integer id = tblschoolorganizationinfomapper.insertreturnid(info);
                    id = info.getid();
                    log.info("插入成功!id = {}", id);

注解开发代码:

@mapper
public interface tblschoolorganizationinfomapper extends basemapper<tblschoolorganizationinfo> {
    @insert("insert into tblschoolorganizationinfo(`createtime`, `isdeleted`, `updatetime`, `code`, `name`, `remarks`, `theorder`, `childnum`, `isleaf`, `parentid`, `thelevel`, `trainingscope`, `allnodesname`, `rootid`, `secondnodeid`, `account`) " +
            "values(#{createtime},#{isdeleted},#{updatetime},#[code],#{name},#{remarks},#{theorder},#{childnum},#{isleaf},#{parentid},#{thelevel},#{trainingscope},#{allnodesname},#{rootid},#{secondnodeid},#{account})")
    @options(usegeneratedkeys = true, keyproperty = "id")
    integer insertreturnid(tblschoolorganizationinfo info);
}

xml形式:

<!doctype mapper
        public "-//mybatis.org//dtd mapper 3.0//en"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.*******.mapper.tblschoolorganizationinfomapper">
    <!-- todo sql语句赋值  同注解开发一样 功能实现 -->
    <insert id="insertreturnid" usegeneratedkeys="true" keyproperty="id">
        insert into tblschoolorganizationinfo
        (`createtime`, `isdeleted`, `updatetime`, `code`, `name`, `remarks`, `theorder`, `childnum`, `isleaf`, `parentid`, `thelevel`, `trainingscope`, `allnodesname`, `rootid`, `secondnodeid`, `account`)
        values
            (#{createtime}, #{isdeleted}, #{updatetime}, #[code], #{name}, #{remarks}, #{theorder}, #{childnum}, #{isleaf}, #{parentid}, #{thelevel}, #{trainingscope}, #{allnodesname}, #{rootid}, #{secondnodeid}, #{account})
    </insert>
</mapper>

注意事项

1.需要注意插入的表主键要设置主键递增,auto_increment。

2.不管是哪种形式,记得加上

//注解形式
@options(usegeneratedkeys = true, keyproperty = "id")

//xml形式
 <insert id="insertreturnid" usegeneratedkeys="true" keyproperty="id">

否则即是添加功能正常但是你返回的id值不正确,是一串很大的负数值如-759160831

3.在编写两种形式的sql时不要进行添加id值,不写就行。否则可能造成添加后,id值是一串很大的值。

4.在你正确编写好sql后,在你的控制类调用方法这里注意一下,一个误区,时间长没用我也中招了,这样返回来的id实际是返回的是影响的行数!!!所以说比如我这个情况,返回 回来的就是1.

但是mybatis会将你添加成功的对象赋值给你现有的对象中,所以获取id可以直接get一下原来的对象,即可获得正确的id值。

实际应该是这样

integer id = tblschoolorganizationinfomapper.insertreturnid(info);
                    log.info("插入成功!影响的行数 row = {}", id);
                    id = info.getid();
                    log.info("插入成功!id = {}", id);

其实是一个很简单的问题,但是容易记错。

总结

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com