springboot~mybatis中使用selectKey获取自增主键

这篇具有很好参考价值的文章主要介绍了springboot~mybatis中使用selectKey获取自增主键。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在mybatis中,我们在insert操作之后,可以获取到自增主键的值,这个需要我们用到这个方法,在使用时有一个坑需要注意,一会儿会说到。

  • 假设我们有数据表id_offset,然后id是自增主键
  • 我们在插入数据后,希望得到这个新插入的主键的值
  • 我们不希望通过两条语句实现,因为这样在并发时会有问题

数据结构

DROP TABLE IF EXISTS `id_offset`;
CREATE TABLE `lawfirm_id_offset`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `kgid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
);

mybatis中的mapper文件

   <insert id="insertIdOffset" parameterType="IdOffset">
        <selectKey resultType="long" keyProperty ="id" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT INTO lawyer_id_offset (kgid) VALUES (#{kgid})

    </insert>

java中调用它

注意,这里有个坑,获取自增主键,不是获取mapper的返回值,而是从当前实体中获取id,这点需要注意。

	@GetMapping("insert")
	public AjaxResult insert() {
		IdOffset idOffset = new IdOffset();
		idOffset.setKgid("ax01");
		idOffsetMapper.inserIdOffset(idOffset );
		return AjaxResult.success(idOffset.getId());
	}

解析后的SQL语句

springboot~mybatis中使用selectKey获取自增主键

selectKey不起作用的原因

在 MyBatis 中使用 <selectKey> 来获取自增主键值时,有时可能会出现返回 1 的情况。这可能是因为在 MyBatis 的执行环境和命令行中执行 SQL 语句的方式有一些差异,导致了这种不同的结果。

下面是一些可能导致此问题的原因和解决方法:

  1. 事务问题: MyBatis 默认是在事务中执行 SQL 语句的。如果你在 <insert> 中同时使用了 <selectKey>,确保你的事务配置正确,事务提交之后才能正确地获取到自增主键值。

  2. 数据库返回值处理问题: MyBatis 在执行 <insert> 语句后,会通过 JDBC 获取数据库的返回结果。如果数据库的返回结果不符合预期,可能导致 MyBatis 返回 1。确保数据库返回的结果和 MyBatis 预期的结果一致。

  3. 数据库驱动问题: 不同的数据库驱动可能在处理 <selectKey> 时存在不同的行为。确保使用了与你的数据库兼容的驱动版本。

  4. 日志输出: 启用 MyBatis 的日志输出,查看生成的 SQL 语句以及执行情况,以便进一步分析问题。

  5. 环境问题: 确保在 MyBatis 中配置了正确的数据库连接信息,以及其他必要的配置项。

如果你已经排除了上述可能的问题,但仍然无法解决,建议提供更多关于你的 MyBatis 配置、映射文件和代码的详细信息,以及在命令行上执行 SQL 语句的方式,这样我才能更准确地帮助你排查问题。文章来源地址https://www.toymoban.com/news/detail-634527.html

到了这里,关于springboot~mybatis中使用selectKey获取自增主键的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql如何自定义自增主键值,以及所遇到的不生效问题

    最近有一个需求,要求对某些数据的数据库主键id格式化,要求id为(202311080000)的形式去自增,可以在get请求获取到这些数据时在请求路径上看到格式化的id,但是之前数据id有大于202311080000数值的,导致自增的主键值并没有生效(即使删除相关数据) 如何自定义自增主键值 第一种通过命

    2024年04月15日
    浏览(39)
  • 面试官:MySQL 自增主键一定是连续的吗?大部分人都会答错!

    MySQL版本:8.0 数据库表:T (主键id,唯一索引c,普通字段d) 如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不能保证连续递增。 推荐一个开源免费的 Spring Boot 实战项目: https://github.com/javastacks

    2024年02月06日
    浏览(42)
  • mybatis实战:四、insert 用法(普通插入、返回主键自增的值)

    1.UserMapper.xml 1.指定特殊数据类型 2.<insert >元素,这个标签包含如下属性  2. UserMapperTest  1.只插入一条数据 2.回滚(不写入数据库) 3.插入后判断是否为空(为空/不为空,抛异常) 3.UserMapper 方法一: 使用 JDBC 方式返回主键自增的值  方法二: 使用 selectKey 返回主键的值

    2024年02月07日
    浏览(47)
  • 【SpringBoot】Mybatis执行insert/update后如何获得主键id

    在业务开发的时候,由于MyBatis框架的insert语句默认是不返回记录的主键值,而是返回插入的记录条数的,但是如果业务层需要得到插入数据的主键时候,可以通过配置的方式来实现获取插入数据的ID功能。 方法1、开启useGeneratedKeys属性方法 方法2、使用selectKey和 order=\\\"AFTER\\\"方式

    2024年02月11日
    浏览(41)
  • mysql表主键自增过大问题

    问题及项目环境   问题 最近在做项目时,发现我创建的每一个表的主键设置自增,在插入数据数据时会出现 自增值过大的问题。 问题展示: 在后端执行Basemapper中的insert()方法时,数据库中的主键id字段为下: 且我在对应的实体类的设置为下:  我们的期望时看到Id = 1,而不是

    2024年02月16日
    浏览(46)
  • mysql高并发下主键自增打来的问题

    在一般情况下,在新增领域对象后,都需要获取对应的主键值。使用应用层来维护主键,在一定程度上有利于程序性能的优化和应用移植性的提高。在采用数据库自增主键的方案里,如果JDBC驱动不能绑定新增记录对应的主键,就需要手工执行查询语句以获取对应的主键值,对

    2024年02月13日
    浏览(38)
  • 通过DBeaver 给Postgre SQL表 设置主键自增

    1.创建表 CREATE TABLE public.company ( id int4 NOT NULL , name text NOT NULL, age int4 NOT NULL, address bpchar(50) NULL, salary float4 NULL, join_date date NULL, CONSTRAINT company_pkey PRIMARY KEY (id) ); 2.插入数据(不传入id) INSERT INTO public.company (name, age, address, salary, join_date) VALUES(\\\'Kobe\\\', 20, \\\'Lake\\\', 10000, \\\'1996-07-13\\\');  

    2024年02月12日
    浏览(71)
  • Hibernate适配DM数据库主键自增配置

    hibernate有多种生成主键策略,例如assigned、increment、hilo、seqhilo、sequence、identity、native、uuid、guid等方法,其中native由hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式,灵活性很强。如果能支持identity则使用identity,如果支持sequence则使用

    2023年04月24日
    浏览(47)
  • Oracle 数据库实现主键字段自增的方法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在 Oracle 数据库中,实现主键字段的自增功能对于确保数据的唯一性和简化数据插入操作非常重要。本文将介绍如

    2024年02月12日
    浏览(46)
  • 使用mybatis进行数据插入时如何返回自增的id

    当我们存储数据时,有时候id是选择让数据库自增的 。但前端如果需要当前添加数据的id时,我们在代码上就无法返回了。 在 MyBatis 中,可以通过配置来确保数据库操作成功。具体方式是在 Mapper.xml 文件中使用 useGeneratedKeys 和 keyProperty 属性来获取自增主键的值,以判断插入操

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包