ToB企服应用市场:ToB评测及商务社交产业平台

标题: springboot~mybatis中使用selectKey获取自增主键 [打印本页]

作者: 美丽的神话    时间: 2023-8-9 09:20
标题: springboot~mybatis中使用selectKey获取自增主键
在mybatis中,我们在insert操作之后,可以获取到自增主键的值,这个需要我们用到这个方法,在使用时有一个坑需要注意,一会儿会说到。
数据结构
  1. DROP TABLE IF EXISTS `id_offset`;
  2. CREATE TABLE `lawfirm_id_offset`  (
  3.   `id` bigint(20) NOT NULL AUTO_INCREMENT,
  4.   `kgid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  5.   PRIMARY KEY (`id`) USING BTREE
  6. );
复制代码
mybatis中的mapper文件
  1.    <insert id="insertIdOffset" parameterType="IdOffset">
  2.         <selectKey resultType="long" keyProperty ="id" order="AFTER">
  3.             SELECT LAST_INSERT_ID()
  4.         </selectKey>
  5.         INSERT INTO lawyer_id_offset (kgid) VALUES (#{kgid})
  6.     </insert>
复制代码
java中调用它

注意,这里有个坑,获取自增主键,不是获取mapper的返回值,而是从当前实体中获取id,这点需要注意。
  1.         @GetMapping("insert")
  2.         public AjaxResult insert() {
  3.                 IdOffset idOffset = new IdOffset();
  4.                 idOffset.setKgid("ax01");
  5.                 idOffsetMapper.inserIdOffset(idOffset );
  6.                 return AjaxResult.success(idOffset.getId());
  7.         }
复制代码
解析后的SQL语句


selectKey不起作用的原因

在 MyBatis 中使用  来获取自增主键值时,有时可能会出现返回 1 的情况。这可能是因为在 MyBatis 的执行环境和命令行中执行 SQL 语句的方式有一些差异,导致了这种不同的结果。
下面是一些可能导致此问题的原因和解决方法:
如果你已经排除了上述可能的问题,但仍然无法解决,建议提供更多关于你的 MyBatis 配置、映射文件和代码的详细信息,以及在命令行上执行 SQL 语句的方式,这样我才能更准确地帮助你排查问题。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4