首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用getGeneratedKeys - MyBatis时获取更新记录主键失败

在使用MyBatis时,如果使用getGeneratedKeys方法获取更新记录的主键失败,可能是由于以下几个原因导致的:

  1. 数据库驱动不支持自动生成主键:某些数据库驱动不支持自动生成主键,因此无法通过getGeneratedKeys方法获取更新记录的主键。这种情况下,可以考虑使用其他方式来获取主键,例如使用数据库的序列或触发器来生成主键。
  2. 数据库表没有配置自增主键:如果数据库表没有配置自增主键,那么即使数据库驱动支持自动生成主键,也无法通过getGeneratedKeys方法获取更新记录的主键。在这种情况下,可以通过修改数据库表的结构,将某一列设置为自增主键来解决该问题。
  3. MyBatis配置文件未正确配置:在MyBatis的配置文件中,需要正确配置生成主键的方式。通常可以通过设置useGeneratedKeys属性为true来启用自动生成主键的功能。同时,还需要设置keyProperty属性来指定将生成的主键值赋给哪个属性。
  4. SQL语句未正确配置:在执行更新操作的SQL语句中,需要正确配置生成主键的方式。通常可以通过在SQL语句中添加"SELECT LAST_INSERT_ID()"来获取最后插入的自增主键值。同时,还需要将useGeneratedKeys属性设置为true,以告知数据库驱动需要返回生成的主键值。

总结起来,当使用getGeneratedKeys方法获取更新记录的主键失败时,需要检查数据库驱动是否支持自动生成主键、数据库表是否配置了自增主键、MyBatis配置文件是否正确配置了生成主键的方式以及SQL语句是否正确配置了生成主键的方式。根据具体情况进行相应的调整和修改,以确保能够成功获取更新记录的主键。

腾讯云相关产品和产品介绍链接地址:

  • 云数据库 MySQL:https://cloud.tencent.com/product/cdb_mysql
  • 云数据库 PostgreSQL:https://cloud.tencent.com/product/cdb_postgresql
  • 云数据库 SQL Server:https://cloud.tencent.com/product/cdb_sqlserver
  • 云数据库 MongoDB:https://cloud.tencent.com/product/cdb_mongodb
  • 云数据库 MariaDB:https://cloud.tencent.com/product/cdb_mariadb
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • ‍面试官问:MybatisMybatis-Plus执行插入语句后可以返回主键ID吗? ‍我:看我回答...

    一、Mybatis执行插入语句后可以返回主键ID吗? 在想写什么内容的时候,正好看到一个基础面试题上有这个问题,就把它记录下来了。 ‍面试官:你说Mybatis执行插入语句后可以返回主键ID吗??...keyProperty属性,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中,也就是你实体类中,对应数据库的主键id。...最后在实体类中,要有主键的get与set方法,满足后,在impl层controller层,直接实体类.getId() 即可获取本次插入后的主键ID,返回前端即可。...一步一步道来: 可以直接使用Mybatis-Plus的sava方法,或者mapper层的insert方法,它都会将返回的结果自动填充进你映射的的实体类。从而可以直接获取到你的数据。...祝 我们:待别日相见,都已有所成。

    2.6K20

    Java小白学习MyBatisMybatis如何获取自动生成的(主)键值?

    MyBatis这样的持久层框架中,经常需要插入一条记录并取得该记录所对应的主键值。...在Java开发中,默认的JDBC方式已经较为成熟地解决了这个问题,可以通过getGeneratedKeys()方法获取自动生成的主键值,而在MyBatis中,也提供了多种方式来处理自动生成主键值的问题。...一、使用元素 元素来获取主键值。...2、在插入记录后需要立即获得其主键,可以使用方式;如果只是需要将主键值设置到Java对象中,可以使用useGeneratedKeys属性,这样可以避免一次额外的查询操作。...3、有的数据库对于SELECT LAST_INSERT_ID()仅支持由INSERT触发而产生的自增长ID,因此在使用该方式,需先进行插入操作才能够正确获取主键值。

    1.4K30

    MyBatis主键回填的两种实现方式

    JDBC 中实现主键回填其实非常容易,主要是在构造 PreparedStatement 指定需要主键回填,然后在插入成功后,查询刚刚插入数据的 id ,示例代码如下: public int insert...在更新操作执行完成之后,调用 getGeneratedKeys ,然后又会获取到一个 ResultSet 对象,从这个游标集中就可以获取到刚刚插入数据的id。...框架写法 一般情况下,主键有两种生成方式: 主键自增长 自定义主键(一般可以使用UUID,或者类UUID) 如果是第二种,主键一般是在Java代码中生成,然后传入数据库执行插入操作,如果是第一个主键自增长...MyBatis 的基本用法就无需多说了,这也不是本文的重点,我们还是来看看 MyBatis主键回填的两种不同实现方式吧!...松哥推荐大家使用这种方式,原因很简单,这种方式实现简便省事。

    1.1K30

    Data Access 之 MyBatis(三) - SQL Mapping XML(Part A)

    useGeneratedKeys (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL...keyProperty (仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey...获取自增主键的值 数据存储在支持自增主键的数据库中,如何获取数据插入成功后数据库生成的主键值?...null,MyBatis是如何获取自增主键的值的?...调用了Statement接口中的getGenerateKeys()方法,获取数据库自动生成的主键值,然后赋值给keyProperty属性指定的实体类属性 获取非自增主键的值 对于不支持自定生成主键的数据库如

    83310

    Mybatis 中的主键返回

    email,info,create_time) values(#{userName},#{password},#{email},#{info},#{createTime}) 使用...useGeneratedKeys设置为true后 , MyBatis使用JDBC的getGeneratedKeys方法取出由数据库内部生成的主键 ....当需要设置多个属性 , 使用逗号隔开 , 这种情况下 还需要配置 keyColumn属性 , 按顺序指定数据库的列 , 这里列的值会和 keyProperty 配置的属性一一对应 ....由于要使用数据库返回的主键值 , 所以SQL上下两部分的列中去掉了 id 列和对于的 #{id} 属性 返回非自增主键 采用标签获取主键的值 , 这种方式对提供和不提供主键自增功能的数据库同样适用...和上面useGeneratedKeys的用法和含义一样 , 这里的resultType用于设置返回值类型. order 属性和数据库相关 , 在MYSQL 中 , order是AFTER , 因为当前及记录主键值在

    79920

    MyBatis之Mapper XML 文件详解(一)

    内联参数是首选,这个元素可能在将来被移除,这里不会记录。 sql – 可被其他语句引用的可重用语句块。...对每个插入、更新或删除操作,通常对应多个查询操作。这是 MyBatis 的基本原则之一,也是将焦点和努力放到查询和结果映射的原因。简单查询的 select 元素是非常简单的。...这就使得在获取嵌套的结果集的时候不至于导致内存不够用。默认值:false。...useGeneratedKeys:(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像...对于不支持自动生成类型的数据库或可能不支持自动生成主键 JDBC 驱动来说,MyBatis 有另外一种方法来生成主键

    1.4K60

    Spring boot Mybatis-XML方式通用Mapper插件(七)

    以上版本 @MapperScan 注解,请使用 tk.mybatis.spring.annotation.MapperScan 注解。...使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段)。.... 6.建议一定是有一个@Id注解作为主键的字段,可以有多个@Id注解的字段作为联合主键. 7.默认情况下,实体类中如果不存在包含@Id注解的字段,所有的字段都会作为主键字段进行使用(这种效率极低)....8.实体类可以继承使用,可以参考测试代码中的tk.mybatis.mapper.model.UserLogin2类. 9.由于基本类型,如int作为实体类字段时会有默认值0,而且无法消除,所以实体类中建议不要使用基本类型...使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段) 2.

    3.5K10

    MyBatis-04 MyBatis XML方式之insert元素

    如果设置为true , MyBatis使用JDBC的getGeneratedKeys方法取出由数据库内部生成的主键 keyProperty: MyBatis通过getGeneratedKeys获取组建后要将辅助的属性名...JDCB方式返回主键自增的值 在使用主键自增(比如MySql 、SQLServer数据库),插入数据库后可以需要得到自增的主键值,然后使用这个值进行一些其他的操作。...会使用JDBC的getGeneratedKeys方法来取由数据库内部生成的主键。...对应这种情况,可以使用 selectKey标签来获取主键的值,这种方式不仅使用不提供主键自增功能的数据库,同时也适用于提供主键自增功能的数据库 1.UserMapper接口增加接口方法 // 演示使用selectKey...因为当前记录主键值是在insert语句执行成功后才获取到的。

    1.7K20

    mapper

    -- 7. useGeneratedKeys (可选配置, 默认为false)           (仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys...唯一需要说明的就是元素里面的useGeneratedKeys和keyProperties属性,这两个属性是用来获取数据库中的主键的。...在数据库里面经常性的会给数据库表设置一个自增长的列作为主键,如果我们操作数据库后希望能够获取这个主键该怎么弄呢?...MyBatis 通常可以推算出来,但是为了更加确定写上也不会有什么问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。...=-1的数据才能进行status更新.其他的将使用默认值更新,而不会保持原数据不变.如果要保持原数据不变呢?

    62650

    MyBatis从入门到多表关联

    特有属性: 属性 描述 keyProperty (仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis使用 getGeneratedKeys 的返回值或 insert...useGeneratedKeys (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL...: 数据库不支持主键自动增长(Oracle),或者支持增长的数据库取消了主键自动增长使用另一种方式。...元素会首先运行,会通过自定义的语句来设置数据表中的主键(如果表中没有记录,则设置为1,否则就将id值+1,来作为新的主键),然后再调用插入语句。...当使用可迭代对象:index是当前迭代的次数,item值是本次迭代获取的元素。 当使用字段(或Map.Entry对象的集合时):index是键,item是值。

    38020

    Mybatis映射器之insert-update-delete

    ,不能和keyColumn同时使用 联合主键可以用逗号隔开 useGeneratedKeys 这会令Myabatis使用JDBC的getGeneratedKeys方法来取出有数据库内部生成的主键,例如mysql...取值为true/false,默认为false keyColumn 指明第几列是主键,不能和keyProperty共同使用,只能接受整形参数 联合主键可以用逗号分割 lang 自定义语言,可使用第三方语言...,使用较少 - 主键回填和自定义 现实中,数据表可能拥有自增字段,或者我们需要给一个字段插入特定值,而mybatis提供了实现的方法。...首先可以用keyProperty属性指定哪个是主键字段,同时使用useGeneratedKeys属性告诉mybatis这个主键是否使用数据库内置策略生成。...这里我们举两个例子,一个是使用mysql的自增功能,另一个是通过sql设置主键。 这个例子代码文件格式和Mybatis映射器之insert,完整代码参考这篇文章。

    1.1K20

    Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    =,size_16,color_FFFFFF,t_70#pic_center] *** Mybaits系列全解 (持续更新) Mybatis系列全解(一):手写一套持久层框架 Mybatis系列全解(二...fetchSize 可选项,获取记录的总条数设定。这是一个给驱动的建议值,尝试让驱动程序每次批量返回的结果行数等于这个设置值。 默认值为未设置(unset)(依赖驱动)。...使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。...keyProperty : (仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey...JDBC 驱动,MyBatis 有另外一种方法来生成主键

    97500
    领券