Mybatis如何获取自动生成的(主)键值?

1、Mybatis

Mybatis提供了几种获取自动生成的主键值的方式:

1. 使用<selectKey>元素:可以在插入语句执行后,通过<selectKey>元素来获取自动生成的主键值。例如:

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

在上面的例子中,useGeneratedKeys属性设置为true表示开启自动生成主键值的功能,keyProperty属性指定了主键值将被设置到哪个属性中。

2. 使用<selectKey>元素的order属性:可以通过order属性来指定获取主键值的顺序。例如:

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

在上面的例子中,order属性设置为AFTER表示在插入语句执行后获取主键值。

3. 使用<selectKey>元素的statementType属性:可以通过statementType属性来指定获取主键值的方式。例如:

<insert id="insertUser" parameterType="User">
    <selectKey keyProperty="id" statementType="PREPARED" resultType="int">
        SELECT LAST_INSERT_ID()
    </selectKey>
    INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>

在上面的例子中,statementType属性设置为PREPARED表示使用预编译语句来获取主键值。

4. 使用<selectKey>元素的order属性和statementType属性的组合:可以通过order属性和statementType属性的组合来灵活地获取主键值。例如:

<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
    <selectKey keyProperty="id" order="AFTER" statementType="PREPARED" resultType="int">
        SELECT LAST_INSERT_ID()
    </selectKey>
    INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>

在上面的例子中,order属性设置为AFTER表示在插入语句执行后获取主键值,statementType属性设置为PREPARED表示使用预编译语句来获取主键值。

5.在<insert>标签中使用 useGeneratedKeys   和  keyProperty 两个属性来获取自动生成的主键值。

例如:

<insert id="insertname"  usegeneratedkeys="true" keyproperty="id">  

    insert into names (name) values (#{name})  

</insert> 

业务层使用

int rows = userMapper.insertUser(user);
//执行完毕后,id已经被设置到对象中
System.out.println(user.getId()); // 会输出自动生成的id

总结起来,使用<selectKey>元素是获取自动生成的主键值的常用方式,可以根据具体情况选择不同的属性来实现不同的获取方式。

2、Mybatis-plus

如果使用Mybatis-Plus的话,获取自动生成的主键值的方式如下:

1. 使用实体对象的getId()方法:在插入数据后,通过实体对象的getId()方法获取自动生成的主键值。例如:

User user = new User();
user.setUsername("test");
user.setPassword("123456");
userMapper.insert(user);
Long id = user.getId();

在上面的例子中,userMapper.insert(user)会将数据插入数据库,并自动生成主键值,然后通过user.getId()方法获取该主键值。

2. 使用实体对象的自增主键注解:在实体对象的主键字段上添加@TableId(type = IdType.AUTO)注解,可以指定主键为自增类型。例如:

public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    // other fields and methods
}

在上面的例子中,@TableId(type = IdType.AUTO)注解指定了主键为自增类型。在插入数据后,通过实体对象的getId()方法获取自动生成的主键值。

3. 使用KeyGenerator类:可以通过KeyGenerator类来获取自动生成的主键值。例如:

User user = new User();
user.setUsername("test");
user.setPassword("123456");
userMapper.insert(user);

KeyGenerator keyGenerator = Jdbc3KeyGenerator.INSTANCE;
Object id = keyGenerator.execute(userMapper);

在上面的例子中,userMapper.insert(user)会将数据插入数据库,并自动生成主键值。然后通过KeyGenerator类的execute()方法获取该主键值。

总结起来,Mybatis-Plus提供了多种方式来获取自动生成的主键值,可以根据具体情况选择适合的方式来实现。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在MyBatis中,可以通过两种方式获取自动生成主键值: 1. 在Mapper.xml文件中使用<selectKey>标签,该标签可以在执行插入语句之前或之后执行一个查询语句,获取自动生成主键值。例如: ``` <insert id="insertUser" parameterType="User"> <selectKey keyProperty="id" order="AFTER" resultType="int"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO user(name, age) VALUES(#{name}, #{age}) </insert> ``` 在这个例子中,<selectKey>标签在插入语句之后执行一个查询语句,获取自动生成主键值,并将其设置到User对象的id属性中。 2. 在Mapper接口中使用@Options注解,该注解可以在执行插入语句之后获取自动生成主键值。例如: ``` @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})") @Options(useGeneratedKeys = true, keyProperty = "id") int insertUser(User user); ``` 在这个例子中,@Options注解的useGeneratedKeys属性设置为true,表示要获取自动生成主键值;keyProperty属性指定了主键值要设置到User对象的哪个属性中。 ### 回答2: MyBatis是一个开源的持久层框架,它提供了一种灵活的映射器方式来将数据库表映射成为Java对象。MyBatis支持自动生成主键值,可以通过以下两种方式来获取自动生成主键值: 1. 在Mapper.xml中使用selectKey元素 selectKey元素是用来自动生成主键值的,可以在Mapper.xml文件中通过以下方式定义: ``` <insert id="insertUser" parameterType="User"> <selectKey keyProperty="id" resultType="int" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO user (username,password) VALUES (#{username},#{password}) </insert> ``` 其中,keyProperty属性指定了从数据库获取到的主键值要映射到Java对象的哪个属性上,resultType属性指定了主键值的数据类型,order属性指定了selectKey元素执行顺序。在执行insert语句之前,会先执行selectKey语句获取自动生成主键值,并将值设置到User对象的id属性中。 2. 在Java代码中使用@Options注解 @Options注解是MyBatis提供的另一种获取自动生成主键值的方式,可以在Mapper接口的方法上使用@Options注解来启用自动生成主键值的功能,示例如下: ``` @Insert("INSERT INTO user (username,password) VALUES (#{username},#{password})") @Options(useGeneratedKeys = true, keyProperty = "id") int insertUser(User user); ``` 其中,useGeneratedKeys属性指定了是否启用自动生成主键值的功能,keyProperty属性指定了从数据库获取到的主键值要映射到Java对象的哪个属性上。在执行insertUser方法后,将会自动获取自动生成主键值,并将值设置到User对象的id属性中。 总之,MyBatis提供了多种获取自动生成主键值的方式,可以根据具体的需求和实现方式选择相应的方法。 ### 回答3: MyBatis 是一种流行的 Java ORM 框架,它可以通过与数据库表的映射来实现数据的持久化。在使用 MyBatis 时,我们可以将传统的 SQL 语句与 Java 代码分离,通过 XML 配置文件或者注解来配置 SQL 和执行的逻辑。对于需要操作的记录,我们一般会指定一个唯一的主键,用来标识该记录的唯一性。MyBatis 可以自动为我们生成主键,但需要我们手动获取这个主键值。 MyBatis 提供了两种获取自动生成主键值的方式:在 SQL 语句中获取并返回主键值或者通过返回生成主键值的方法获取。其中,第一种方式要求数据库支持返回生成的主键值,例如 MySQL 中的 LAST_INSERT_ID() 函数。而第二种方式要求在映射文件中配置主键返回方式,并在对应的 INSERT 语句中添加 keyProperty 属性来告诉 MyBatis 生成的主键应该放在哪个对象的哪个属性中。 下面是在映射文件中配置获取自动生成主键值的步骤: 1. 配置主键生成方式:在映射文件的insert标签中添加如下配置: ``` <insert id="insertUser" keyProperty="id" useGeneratedKeys="true"> INSERT INTO user(name, age) VALUES(#{name}, #{age}) </insert> ``` 在这个配置中,keyProperty 属性用来指定主键应该存放在哪个 Java 对象的哪个属性中,useGeneratedKeys 属性用来告诉 MyBatis 是否使用自动生成主键。 2. 获取主键:在执行插入操作时,需要创建一个 Java 对象来保存插入的数据,然后调用 sqlSession 的 insert 方法来执行插入操作。执行完插入操作后,可以通过 getGeneratedKeys 方法来获取自动生成主键值。 ``` User user = new User(); user.setName("test"); user.setAge(18); sqlSession.insert("insertUser", user); // 获取自动生成主键值 Long id = user.getId(); ``` 在这个代码片段中,我们通过 insertUser 的入参 user 来将要插入的数据传递给 MyBatis,在插入完成后,通过 user.getId() 方法来获取自动生成主键值。 总结起来,获取自动生成主键值有两种方式:在 SQL 语句中获取并返回主键值或者通过返回生成主键值的方法获取。在 MyBatis 中,我们可以通过配置主键生成方式,来使得 MyBatis 能够自动为我们生成主键,并通过 getGeneratedKeys 方法获取自动生成主键值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穗余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值