mybatis,在insert时返回插入后的主键

<insert id="insertUser" parameterType="com.test.User">
		<!-- selectKey将主键返回,需要再返回 -->
		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			select LAST_INSERT_ID()
		</selectKey>
		insert into user(username)
		values(#{username});
</insert>

  其中部分标签解释如下:

  1. selectKey:将插入到数据库的某条记录的主键,返回到指定的对象(user)对应属性中。需要注意的是order属性,如Mysql一类支持自动增长的数据库中,order需要设置为AFTER才能获取到正确的值,但是如Oracle取序列的情况,就需要设置为before。其次在使用Spring管理事务时,selectKey和插入在同一事务当中,因而Mysql这样的情况由于数据尚未插入到数据库中,所以得不到自动增长的key,此时需要取消事务管理方可解决问题。

  2. keyProperty:指定返回的主键,存储在对象(user)中的哪个属性。需要注意的是keyProperty中对应的是对象的属性名,而非数据库的字段名。其次,添加该属性并非改变insert的返回值,insert还是返回新增的结果,也就是受影响的行数。

  3. order:相对于insert语句,selectKey标签中的sql的执行顺序(after或者before)。由于mysql的自增原理,执行完insert语句后才会生成主键,所以执行顺序是after。

  4. resultType:sql语句返回类型所对应的Java类型。

  5. LAST_INSERT_ID():mysql的函数返回auto_increment自增列新记录id值。

 

参考文献:

  1.https://blog.csdn.net/zhanyu1/article/details/82560551

  2.https://blog.csdn.net/qq_39210750/article/details/108248320

  3.https://www.cnblogs.com/duanxz/p/3862315.html

posted @ 2021-07-24 16:56  一叶平易  阅读(329)  评论(0编辑  收藏  举报