MyBatis 新增一条记录 返回id的配置

在很多开发的场景中,都需要刚才新增数据的id值,如果再去进行查询的话这样就比较麻烦。可以直接通过在 mapper.xml中的标签中增加属性:
useGeneratedKeys="true" keyProperty="自己定义的对象id字段"

在java文件中的使用,如下

		Product product=new Product();
        product.setName("手表-男");
        product.setCatalog_name("手表");
        product.setPrice(new BigDecimal(819));
        product.setPicture("59c8a09cN5c806732.jpg");
        product.setDescription("");
        int addBack=productService.addProduct(product); //返回的插入影响的行数

		int id=product.getId();    //刚插入数据的id值
### MyBatis 插入新记录返回生成的 ID 在使用 MyBatis 进行数据库操作时,可以通过配置 `useGeneratedKeys` 和设置 `keyProperty` 来实现插入数据后自动获取由数据库生成的主键值。以下是具体方法: #### 配置方式 在 MyBatis 的 SQL 映射文件中定义 `<insert>` 标签时,需指定两个重要属性: 1. **`useGeneratedKeys="true"`**: 表明需要使用 JDBC 的自动生成主键功能[^1]。 2. **`keyProperty`**: 将生成的主键值映射到实体类中的某个字段上。 下面是一个完整的 XML 配置示例: ```xml <insert id="insertUser" useGeneratedKeys="true" keyProperty="id"> INSERT INTO users (name, email) VALUES (#{name}, #{email}) </insert> ``` 在此配置下: - 数据库会为每条新增记录生成唯一的主键值。 - 主键值会被赋给传入对象对应的 `id` 属性(假设 Java 实体类中有名为 `id` 的字段)[^2]。 #### 使用 Mapper 接口的方式 如果采用基于接口的编程风格,则可以在 DAO 或 Mapper 中这样调用: ```java @Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})") @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") void insertUser(User user); ``` 上述代码片段通过注解形式实现了相同的功能。其中 `@Options` 注解用于进一步细化选项,比如指定了 `keyColumn` 参数来明确哪一列作为主键所在位置[^3]。 #### 测试代码实例 为了验证该机制是否正常工作,可以编写如下测试逻辑: ```java public class UserTest { @Test public void testInsertAndGetId() throws Exception{ SqlSession session = sqlSessionFactory.openSession(); try { UserMapper mapper = session.getMapper(UserMapper.class); User newUser = new User(); newUser.setName("John Doe"); newUser.setEmail("john.doe@example.com"); mapper.insertUser(newUser); // 执行插入语句 assertNotNull(newUser.getId()); // 断言确认已成功获得ID System.out.println("Inserted record with auto-generated ID: "+newUser.getId()); session.commit(); // 提交事务使更改生效 } finally { session.close(); } } } ``` 此单元测试展示了如何创建一个新的用户对象,在调用了 `mapper.insertUser()` 方法之后立即访问其 `id` 字段即可得到刚产生的唯一标识符[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值