mybatis中useGeneratedKeys和keyProperty含义

本文介绍了在Mybatis中如何获取插入记录后自增字段的值。通过在Mapper文件中设置`useGeneratedKeys=true`和`keyProperty=id`,Mybatis会自动将数据库生成的自增ID赋值给Java对象的id属性。在插入操作完成后,可以通过对象的getter方法获取这个自增ID。

Mybatis中获取插入记录的自增字段的值:

第一步:
要在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名:

<insert id="insert" parameterType="Spares" 
        useGeneratedKeys="true" keyProperty="id">
        insert into spares(spares_id,spares_name,
            spares_type_id,spares_spec)
        values(#{id},#{name},#{typeId},#{spec})
    </insert>

第二步:
Mybatis执行完插入语句后,自动将自增长值赋值给对象Spares的属性id。因此,可通过Spares对应的getter方法获取!

/**
     * 新增备件
     * @author hellostory
     * @param spares
     * @return
     */
    @RequestMapping(value = "/insert")
    @ResponseBody
    public JsonResponse insert(Spares spares) {
        int count = sparesService.insert(spares);      //count>0 表示成功
        System.out.println( "刚刚插入记录的主键自增长值为:" + spares.getId());

如果没有useGeneratedKeys="true"和keyProperty=“id”,下面 insert 之后的 user.getId() 是无法获取 id 值的public void insert(User user) { int count = userMapper.insert(user); System.out.println(“共插入” + count + “条记录!” + “\n刚刚插入记录的主键自增长值为:” + user.getId()); }

MyBatis的注解开发中,`useGeneratedKeys` `keyProperty` 通常用于插入数据时获取数据库自动生成的主键值。 ### `useGeneratedKeys` `keyProperty` 的作用 - `useGeneratedKeys`:这是一个布尔值,设置为 `true` 时表示使用数据库的自动生成主键功能。即让MyBatis获取数据库自动生成的主键值。 - `keyProperty`:指定将自动生成的主键值赋值给Java对象的哪个属性。 ### 设置方法示例 #### 1. 实体类 首先,创建一个简单的实体类,这里以 `User` 类为例: ```java public class User { private Long id; private String name; private Integer age; // 构造方法、GetterSetter方法 public User() {} public User(String name, Integer age) { this.name = name; this.age = age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } ``` #### 2. Mapper接口 在Mapper接口中使用注解来设置 `useGeneratedKeys` `keyProperty`: ```java import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Options; public interface UserMapper { @Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})") @Options(useGeneratedKeys = true, keyProperty = "id") int insertUser(User user); } ``` 在上述代码中,`@Insert` 注解用于定义插入SQL语句,`@Options` 注解用于设置额外的选项。`useGeneratedKeys = true` 表示使用数据库的自动生成主键功能,`keyProperty = "id"` 表示将自动生成的主键值赋值给 `User` 对象的 `id` 属性。 #### 3. 使用示例 ```java import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream; public class Main { public static void main(String[] args) throws Exception { // 加载MyBatis配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 获取SqlSession try (SqlSession session = sqlSessionFactory.openSession()) { UserMapper userMapper = session.getMapper(UserMapper.class); User user = new User("John", 25); // 插入用户 userMapper.insertUser(user); session.commit(); // 输出自动生成的主键值 System.out.println("Generated ID: " + user.getId()); } } } ``` ### 总结 通过 `@Options` 注解的 `useGeneratedKeys` `keyProperty` 属性,可以方便地在MyBatis的注解开发中获取数据库自动生成的主键值,并将其赋值给Java对象的相应属性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值