【异常解决】SpringBoot3 + 人大金仓 V8+MyBatis-Plus 获取新增自增 ID

博主介绍:✌全网粉丝24W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌

技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。

感兴趣的可以先关注收藏起来,在工作中、生活上等遇到相关问题都可以给我留言咨询,希望帮助更多的人。
技术扩展 :最近发现了一个特别好用的人工智能学习网站,通俗易懂,风趣幽默,忍不住想分享一下给大家,进入传送门:https://www.captainbed.cn/no8g/

SpringBoot3 + 人大金仓 V8+MyBatis-Plus 获取新增自增 ID

  • 一、核心配置(主键自增回显)
    • [1.1 实体类主键注解](#1.1 实体类主键注解)
    • [1.2 application.yml 数据源](#1.2 application.yml 数据源)
  • [二、插入后直接获取 ID](#二、插入后直接获取 ID)
    • [2.1 方式 1:mapper.insert 直接拿 ID](#2.1 方式 1:mapper.insert 直接拿 ID)
    • [2.2 方式 2:service 层调用(常用)](#2.2 方式 2:service 层调用(常用))
  • [三、 关键说明](#三、 关键说明)
  • 四、依赖参考
  • 五、扩展
    • [5.1 在xml中使用useGeneratedKeys=true无效](#5.1 在xml中使用useGeneratedKeys=true无效)
    • [5.2 其他可能产生问题的原因](#5.2 其他可能产生问题的原因)
      • [5.2.1 没写 keyColumn](#5.2.1 没写 keyColumn)
      • [5.2.2 表不是自增主键](#5.2.2 表不是自增主键)
      • [5.2.3 实体类注解冲突](#5.2.3 实体类注解冲突)
      • [5.2.4 全局配置被覆盖](#5.2.4 全局配置被覆盖)

一、核心配置(主键自增回显)

1.1 实体类主键注解

金仓数据库自增主键配置:

bash 复制代码
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

public class Entity {
    // 金仓自增序列主键,插入后自动回填ID
    @TableId(type = IdType.AUTO)
    private Long id;
}

1.2 application.yml 数据源

bash 复制代码
yaml
spring:
  datasource:
    driver-class-name: com.kingbase8.Driver
    url: jdbc:kingbase8://127.0.0.1:54321/dbname
    username: system
    password: password

mybatis-plus:
  configuration:
    # 开启主键回填
    use-generated-keys: true

二、插入后直接获取 ID

2.1 方式 1:mapper.insert 直接拿 ID

bash 复制代码
// 新建实体
User user = new User();
user.setName("测试");
// 插入数据
int rows = userMapper.insert(user);
// 插入成功后,实体自动赋值主键ID
Long newId = user.getId();

2.2 方式 2:service 层调用(常用)

bash 复制代码
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public Long saveUser(User user) {
        userMapper.insert(user);
        // 直接返回回填ID
        return user.getId();
    }
}

三、 关键说明

  1. 金仓表必须设置主键自增:id bigserial primary key
  2. IdType.AUTO 适配人大金仓自增主键
  3. 插入成功后原实体对象自动回填 ID,无需额外查询
  4. SpringBoot3 + Kingbase8 驱动依赖正常引入即可生效

四、依赖参考

bash 复制代码
<!-- 人大金仓驱动 -->
<dependency>
    <groupId>cn.com.kingbase</groupId>
    <artifactId>kingbase8</artifactId>
    <version>8.6.0</version>
</dependency>
<!-- MyBatis-Plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.5</version>
</dependency>

五、扩展

5.1 在xml中使用useGeneratedKeys=true无效

XML 正确写法(KingbaseV8 可用)

bash 复制代码
<insert id="insert" parameterType="com.example.User"
        useGeneratedKeys="true"
        keyProperty="id"      <!-- 实体类属性 -->
        keyColumn="id">       <!-- 数据库列名,Kingbase/PG 必须写 -->
    INSERT INTO user (name) VALUES (#{name})
</insert>
  • useGeneratedKeys="true":开启 JDBC 回填主键
  • keyProperty="id":回填到实体的 id 字段
  • keyColumn="id":Kingbase/PG 必须指定,否则可能拿不到

5.2 其他可能产生问题的原因

5.2.1 没写 keyColumn

MySQL 可省略,但 Kingbase/PG 必须写 keyColumn,否则驱动不返回主键。

5.2.2 表不是自增主键

KingbaseV8 要这样建表:

bash 复制代码
-- 方式1:SERIAL(底层绑定序列)
CREATE TABLE user (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50)
);

-- 方式2:IDENTITY(推荐,V8/V9 支持)
CREATE TABLE user (
    id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    name VARCHAR(50)
);

没绑定序列 IDENTITYuseGeneratedKeys 肯定无效。

5.2.3 实体类注解冲突

用了 MP 的 @TableId(type = IdType.NONE)INPUT,会覆盖 XML 行为,导致不回填。

正确写法:

bash 复制代码
@TableId(type = IdType.AUTO) // 适配数据库自增
private Long id;

5.2.4 全局配置被覆盖

application.yml 里的 mybatis-plus.configuration.use-generated-keys=true 对 XML 无效,XML 必须自己写 useGeneratedKeys

  • XML 中 useGeneratedKeys 对 Kingbase 有效,但必须配合 keyColumn
  • 最稳组合:IdType.AUTO + XML 三属性齐全(useGeneratedKeys+keyProperty+keyColumn)。
  • 不想写 XML:直接用 MP 的 insert 方法,零配置即可回填。

好了,今天分享到这里。希望你喜欢这次的探索之旅!不要忘记 "点赞" 和 "关注" 哦,我们下次见!🎈

本文完结!

祝各位大佬和小伙伴身体健康,万事如意,发财暴富,扫下方二维码与我一起交流!!!

相关推荐
鱼听禅12 小时前
CentOS搭建SVN服务器
数据库·postgresql·sqlserver
ylscode13 小时前
微软Edge浏览器启动时停止将已保存的密码加载到内存中
网络·数据库·安全·安全威胁分析
电魂泡哥19 小时前
SQL出现filesort 一定慢吗
数据库·sql
muddjsv21 小时前
大中小型企业数据层配置规模分析与选型指南
数据库
Runawayliquor21 小时前
opbase:CANN 所有算子的公共地基
大数据·数据库·人工智能·算法
yangshicong1 天前
第11章:结构化输出与数据提取 —— 让 AI 直接返回你想要的数据格式
数据库·人工智能·redis·python·langchain·ai编程
chimchim661 天前
pg dblink使用查询
数据库
Java面试题总结1 天前
java高频面试题(2026最新)
java·开发语言·jvm·数据库·spring·缓存
绝知此事1 天前
【算法突围 02】树形结构与数据库索引:树形结构与数据库索引:从 BST 到 B+ 树的演化与 MySQL 优化
数据库·mysql·算法·面试·b+树