news 2026/10/3 10:25:02

mybatis insert后返回id

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
mybatis insert后返回id

在 MyBatis 中插入数据后返回自增 ID 有以下几种常用方法:

1.使用useGeneratedKeys和keyProperty(推荐)

XML 映射文件方式

<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user(name, age) VALUES(#{name}, #{age}) </insert>

注解方式

@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})") @Options(useGeneratedKeys = true, keyProperty = "id") int insertUser(User user);

2.使用<selectKey>元素(支持更多数据库)

MySQL

<insert id="insertUser" parameterType="User"> <selectKey keyProperty="id" resultType="int" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO user(name, age) VALUES(#{name}, #{age}) </insert>

Oracle

<insert id="insertUser" parameterType="User"> <selectKey keyProperty="id" resultType="int" order="BEFORE"> SELECT SEQ_USER.NEXTVAL FROM DUAL </selectKey> INSERT INTO user(id, name, age) VALUES(#{id}, #{name}, #{age}) </insert>

PostgreSQL

<insert id="insertUser" parameterType="User"> <selectKey keyProperty="id" resultType="int" order="AFTER"> SELECT currval('user_id_seq') </selectKey> INSERT INTO user(name, age) VALUES(#{name}, #{age}) </insert>

3.Java 代码中使用

// 实体类 public class User { private Integer id; // 主键属性 private String name; private Integer age; // getter/setter... } // 使用示例 User user = new User(); user.setName("张三"); user.setAge(25); // 执行插入 int result = userMapper.insertUser(user); // 插入后,id 会自动设置到 user 对象中 System.out.println("生成的ID:" + user.getId()); // 直接获取

4.批量插入返回 ID

MySQL

<insert id="batchInsert" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user(name, age) VALUES <foreach collection="list" item="item" separator=","> (#{item.name}, #{item.age}) </foreach> </insert>
List<User> userList = new ArrayList<>(); // 添加多个 user userMapper.batchInsert(userList); // 每个 user 对象的 id 都会被自动设置

5.注意事项

  1. 数据库支持:需要数据库支持自增主键

  2. keyProperty 配置:必须与实体类的主键属性名一致

  3. 事务管理:在事务中,ID 会在事务提交后才真正确定

  4. 连接池:使用连接池时,确保useGeneratedKeys能正常工作

6.返回多个自增 ID(批量)

<insert id="batchInsertUsers" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user(name, age) VALUES <foreach collection="list" item="user" separator=","> (#{user.name}, #{user.age}) </foreach> </insert>

7.返回非自增的 ID(如 UUID)

// 在插入前生成 ID String uuid = UUID.randomUUID().toString(); user.setId(uuid); userMapper.insert(user); // 或者通过 selectKey 生成

推荐使用方式

  • MySQL/PostgreSQL:使用useGeneratedKeys

  • Oracle:使用<selectKey>的BEFORE模式

  • 批量插入:确保连接池配置支持返回多个 ID

这样插入后,ID 会自动填充到传入的实体对象中,无需额外查询。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/4 5:41:30

学长亲荐10个AI论文软件,自考毕业论文轻松搞定!

学长亲荐10个AI论文软件&#xff0c;自考毕业论文轻松搞定&#xff01; AI工具如何助你轻松应对论文挑战 在自考学习过程中&#xff0c;毕业论文往往是最让人头疼的一环。从选题到撰写&#xff0c;再到反复修改&#xff0c;每一步都需要投入大量时间和精力。而随着AI技术的不断…

作者头像 李华
网站建设 2026/10/1 13:38:12

中高轨激光通信卫星伺服控制器抗辐照电源模块设计

摘要&#xff1a;随着中高轨道激光通信卫星技术的快速发展&#xff0c;伺服控制器作为激光链路建立与维持的核心执行单元&#xff0c;其电源模块的抗辐照特性成为保障星载设备长期可靠运行的关键要素。本文系统梳理了中高轨空间辐射环境特征及其对电源系统的损伤机理&#xff0…

作者头像 李华
网站建设 2026/10/3 17:34:39

Thiol-PEG₄-methyl,巯基聚乙二醇四单元甲基化,生物应用

Thiol-PEG₄-methyl&#xff0c;巯基聚乙二醇四单元甲基化&#xff0c;生物应用 中文名称&#xff1a;巯基聚乙二醇四单元甲基化&#xff08;Thiol-PEG₄-methyl&#xff09; Thiol-PEG₄-methyl 是一种功能化短链聚乙二醇&#xff08;PEG&#xff09;衍生物&#xff0c;其分…

作者头像 李华
网站建设 2026/10/4 3:00:32

中科院让AI大模型学会“分层思考“,底层神经元也能独当一面了

说起人工智能&#xff0c;我们通常把它当作一个整体来看待——输入问题&#xff0c;输出答案&#xff0c;就像一个黑盒子一样神秘。但中科院自动化研究所的研究团队却有了一个颠覆性的发现&#xff1a;原来AI大模型内部其实暗藏着许多"小助手"&#xff0c;每一层神经…

作者头像 李华
网站建设 2026/10/3 3:41:58

网络安全的“地基”怎么打?一文搞懂七大关键安全模型与框架

一、网络安全框架及模型是什么&#xff1f; 网络安全专业机构制定的一套标准、准则和程序&#xff0c;旨在帮助组织了解和管理面临的网络安全风险。优秀的安全框架及模型应该为用户提供一种可靠方法&#xff0c;帮助其实现网络安全建设计划。对于那些希望按照行业最佳实践来设…

作者头像 李华