news 2026/4/15 21:46:09

mybatis insert后返回id

作者头像

张小明

前端开发工程师

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

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

1.使用useGeneratedKeyskeyProperty(推荐)

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/4/16 13:00:04

3P游戏动作为何总对不上位移?

你在玩第三人称(3P)射击 / 动作游戏时, 一定见过这种“违和感爆表”的画面: 敌人明明在狂奔,腿跑得飞快,整个人却像在慢动作滑行 模型已经一脚迈出去了,判定还当他站在原地 你看见对面刚停下,马上抬枪瞄他,结果他在你眼里还在跑步动画 有的人“脚下踩着风火轮”,位移…

作者头像 李华
网站建设 2026/4/16 12:26:10

D365 CE Power Platform 编程系列 (8):JS编程之客户端实体

今天我们来看看怎么针对不同类型的字段构造Javascript对象&#xff0c;并在表单js里面对他们进行更新操作。下图是我们为了今天的测试创建的字段&#xff0c;名称代表了它的字段类型&#xff1a;接下来我们通过如下JS代码对这些字段进行赋值操作&#xff1a;Form_onsave:functi…

作者头像 李华
网站建设 2026/4/16 12:22:30

构建高效任务中心:CDC 数据同步的工程实践与架构权衡

构建高效任务中心&#xff1a;CDC 数据同步的工程实践与架构权衡 在现代业务系统中&#xff0c;任务中心&#xff08;Task Center&#xff09;作为连接数据与行动的核心枢纽&#xff0c;其核心能力之一是从上游业务数据库中可靠、高效、低延迟地同步关键状态变更&#xff0c;并…

作者头像 李华
网站建设 2026/4/12 4:27:52

自动化测试报告设计分享

在软件质量保障体系中&#xff0c;自动化测试已成为不可或缺的环节。然而&#xff0c;测试的价值不仅在于执行过程&#xff0c;更在于结果的呈现与分析。一份精心设计的自动化测试报告&#xff0c;能够将复杂的测试数据转化为有价值的洞察&#xff0c;帮助团队快速定位问题、评…

作者头像 李华
网站建设 2026/4/16 14:04:51

中国刺绣文化网站作品阐释

一、设计过程1. 需求分析与概念设计在设计中国刺绣文化网站之初&#xff0c;进行了详尽的市场调研和需求分析。中国刺绣文化源远流长&#xff0c;拥有深厚的文化底蕴和广泛的受众基础。然而&#xff0c;随着现代生活节奏的加快&#xff0c;传统刺绣文化的传播和普及面临诸多挑战…

作者头像 李华