Springboot实用系列:useGeneratedKeys用法

在Spring Boot项目中,useGeneratedKeys 是 MyBatis 框架中的一个参数,用于指定是否允许 JDBC 支持自动生成主键。这个参数可以在三个不同的位置设置:全局配置文件、XML 映射器和接口映射器。

  1. 全局配置文件 :可以在 MyBatis 的全局配置文件 mybatis-config.xml 中的 <settings> 元素内设置 useGeneratedKeys 参数。例如:

    xml 复制代码
    <settings>
        <setting name="useGeneratedKeys" value="true"/>
    </settings>

    这样设置后,所有接口映射器中的插入操作都会尝试获取自动生成的主键,但对 XML 映射器不起作用。

  2. XML 映射器 :在具体的 XML 映射文件中,可以在 <insert> 标签中设置 useGeneratedKeys 属性。例如:

    xml 复制代码
    <insert id="addBigdataGroup" parameterType="BigdataGroup" useGeneratedKeys="true" keyProperty="groupId" keyColumn="group_id">
        insert into bigdata_group (group_id, group_name, comment, business_line, create_by, remark, create_time)
        values(#{groupId}, #{groupName}, #{comment}, #{businessLine}, #{createBy}, #{remark}, sysdate())
    </insert>

    这里 keyProperty 指定了 Java 对象中的属性名,keyColumn 指定了数据库中的列名,这样在插入操作后,MyBatis 会将生成的主键值回填到对应的 Java 对象属性中。

  3. 接口映射器 :在接口映射器中,可以使用 @Options 注解来设置 useGeneratedKeys 参数。例如:

    java 复制代码
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    @Insert("insert into test(name,descr,url,create_time,update_time) values(#{name},#{descr},#{url},now(),now())")
    Integer insertOneTest(Test test);

    在这里,keyProperty 指定了 Java 对象中的属性,keyColumn 指定了数据库中的列名,useGeneratedKeys 设置为 true 表示启用自动生成主键。

请注意,如果在接口映射器中设置了 useGeneratedKeys 参数,那么这个设置会覆盖全局配置文件中相同的设置。

如果在配置了 useGeneratedKeys 后,插入操作没有返回预期的主键值,可能是因为数据库驱动不支持自动生成主键,或者配置有误。确保数据库表配置了自动生成主键,并且 JDBC 驱动支持这一特性。

相关推荐
HackTwoHub6 小时前
AI大模型网关存在SQL注入、附 POC 复现、影响版本LiteLLM 1.81.16~1.83.7(CVE-2026-42208)
数据库·人工智能·sql·网络安全·系统安全·网络攻击模型·安全架构
wuminyu6 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
l1t6 小时前
DeepSeek总结的DuckLake构建基于 SQL 原生表格式的下一代数据湖仓
数据库·sql
KmSH8umpK7 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第八篇
数据库·redis·分布式
小码哥_常7 小时前
Spring Boot:别再重复造轮子,这些内置功能香麻了
后端
TDengine (老段)7 小时前
从施工监测到运营预警,桥科院用 TDengine 提升桥梁数据管理能力
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
皮皮林5517 小时前
OpenFeign 首次调用卡 3 秒?八年老开发扒透 5 个坑,实战优化到 100ms!
后端
callJJ8 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
海兰8 小时前
【第27篇】Micrometer + Zipkin
人工智能·spring boot·alibaba·spring ai
S1998_1997111609•X8 小时前
论mysql国盾shell-sfa犯罪行为集团下的分项工程及反向注入原理尐深度纳米算法下的鐌檵鄐鉎行为
网络·数据库·网络协议·百度·开闭原则