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

用主键回填的方式来获取自增后的id主键值。数据库自动生成的主键值在插入数据后我们是不能直接得到的,需要用主键回填的功能来获取。在映射文件中SQL语句的插入位置,用<selectkey>标签。再使用SELECT LAST_INSERT_ID();

如下:

  <!-- 主键回填-->
    <!--keyProperty:主键属性  keyColumn:主键列名  resultType:主键返回值类型  order:执行时机(AFTER:插入完成后再获取主键)-->
    <insert id="add2" parameterType="com.itbaizhan.pojo.User">
       <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
           SELECT LAST_INSERT_ID();
       </selectKey>
        insert into user(username,sex,address) values (#{username},#{sex},#{address})
    </insert>

SELECT LAST_INSERT_ID():

查询刚刚插入的记录的主键值,只适用于自增主键,且必须和insert语句一起执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值