首页
学习
活动
专区
圈层
工具
发布

MyBatis + MySQL返回插入成功后的主键id

这是最近在实现perfect-ssm中的一个功能时碰到的一个小问题,觉得需要记录一下,向MySQL数据库中插入一条记录后,需要获取此条记录的id值,以生成对应的key值存入到redis中,id为自增int...修改 原代码为: insert id="insertArticle" parameterType="Article"> insert into ssm_article(article_title,article_create_date...> 这种方式只是返回一个影响行数值,并不能满足此次需求,于是做了如下修改: insert id="insertArticle" useGeneratedKeys="true" keyProperty...=null); System.out.println("insert后article的id:"+article.getId()); } 结果如下: ?...mysql中表的记录如下: ? 结语 首发于我的个人博客,新的项目演示地址:perfect-ssm,登录账号:admin,密码:123456 ?

4.9K60

为什么 insert 配置 SELECT LAST_INSERT_ID() 返回个0呢?

就是这个 selectKey 的配置,在执行插入SQL后,开始执行获取最后的索引值。 通常只要配置的没问题,返回对象中也有对应的 id 字段,那么就可以正确的拿到返回值了。...解析的时候把 Mapper XML 中的 insert 标签语句解析出来,同时解析 selectKey 标签。最终解析完成后,把解析的语句信息使用 MappedStatement 映射语句类存放起来。...因为最开始这两条语句执行的时候,在获取链接的时候,每一条都是获取一个新的链接,那么也就是说,insert xxx、select LAST_INSERT_ID() 在两个 connection 连接执行时...,其实是不对的,没法获取到插入后的索引 ID,只有在一个链接或者一个事务下(一次 commit)才能有事务的特性,获取插入数据后的自增ID。...代码块如下; 这里的链接获取,最开始没有 if null 的判断,每次都是直接获取链接,所以这种非一个链接下的两条 SQL 操作,所以必然不会获得到正确的结果,相当于只是单独执行 SELECT LAST_INSERT_ID

1.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MyBatis插入数据后返回主键id

    最近开发全栈项目时,前端有个数据行可以被随便修改,所以必须给他一个标识记录该数据行,即向MySQL数据库中插入一条记录后,需要获取此条记录的主键id值返回给前端。...原代码 insert id="insertArticle" parameterType="Article"> insert into article(title,create_date,content...,name) values(#{articleTitle},#{articleCreateDate},#{articleContent},#{addName}) insert> 这种方式只是返回一个影响行数值...,并不能满足此次需求,于是做了如下修改: insert id="insertArticle" useGeneratedKeys="true" keyProperty="id" parameterType...所以要打开设为 true keyProperty 仅适用于 insert 和 update,指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert

    2.3K10

    mybatis插入数据后返回自增主键ID详解

    1.场景介绍: ​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后返回的是插入成功的条数...2.插入数据返回自增主键ID方法(一) 在映射器中配置获取记录主键值 xml映射: 在xml中定义useGeneratedKeys为true,返回主键id的值,keyProperty和keyColumn...-- 插入数据:返回记录主键id值 --> insert id="insert" useGeneratedKeys="true" keyProperty="id" keyColumn="id">...需要注意的是,在MyBatis中添加操作返回的是记录数并非记录主键id。...-- 批量添加数据,并返回主键字段 --> insert id="insert" useGeneratedKeys="true" keyProperty="id"> insert into

    14K30

    YashanDB LAST_INSERT_ID函数

    自增值:每个会话的自增初始值为0,当前会话中触发过自增后,自增值取值规则如下:若最近一次执行INSERT语句时插入多行数据,自增值 = 第一行数据插入成功后自增列对应的值。...若最近一次执行INSERT语句时插入1行数据,自增值 = 插入成功后自增列对应的值。LAST_INSERT_ID()返回当前会话最新的自增值,返回类型为BIGINT。若溢出,则返回0。...转换类型当LAST_INSERT_ID函数存在一个参数expr时,用于将参数转换为BIGINT类型并输出,同时会更新当前会话的自增值为LAST_INSERT_ID(expr)的返回值或0。...若expr转换BIGINT类型失败,则LAST_INSERT_ID(expr)返回0。...若expr为NULL,LAST_INSERT_ID(expr)返回NULL且会重置当前会话的自增值为初始值0,即执行LAST_INSERT_ID(NULL)查询后再执行LAST_INSERT_ID()查询

    15900

    mysql insert into as_mysql insert into select使用方法详解

    mysql insert into select使用方法详解2017-11-22 15:47 我们先来看看mysql insert into select的语法规则。...例如: INSERT INTO tbl_temp2 (fld_id) SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id...为确保二进制日志可用于重新创建原始表,MySQL不允许并发插入INSERT … SELECT语句。...SELECT没有ORDER BY子句的语句返回行 的顺序是不确定的。这意味着,在使用复制时,不能保证这样的SELECT返回在主服务器和从服务器上的顺序相同,这可能会导致它们之间的不一致。...由于这个问题,在MySQL 5.5.18中, INSERT…SELECT ON DUPLICATE KEY UPDATE和INSERT IGNORE… SELECT语句被标记为不安全的基于语句的复制。

    3K30
    领券