<!-- 新增用户 -->
<insert id="insertUser" parameterType="com.mybatis.po.User">
<selectKey keyProperty="userId" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO tb_user(user_name,blog_url,remark)
VALUES(#{userName},#{blogUrl},#{remark})
</insert>
@Insert(" insert into table(c1,c2) values (#{c1},#{c2}) ")
@SelectKey(resultType = long.class,keyColumn = "id",before = false,statement = "SELECT LAST_INSERT_ID() AS id",keyProperty = "id")
SelectKey返回的值存在实体类中,线程安全,所以不论插入成功与否id都会安全自增
<!-- 新增用户 -->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="userId" parameterType="com.mybatis.po.User">
INSERT INTO tb_user(user_name,blog_url,remark)
VALUES(#{userName},#{blogUrl},#{remark})
</insert>
@Insert("INSERT INTO tb_user(user_name,blog_url,remark) VALUES(#{userName},#{blogUrl},#{remark}")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
uuid类型和Oracle的序列主键nextval,它们都是在insert之前生成的,其实就是执行了SQL的uuid()方法及nextval()方法,所以SQL映射文件的配置与上面的配置类似,依然使用< selectKey>标签对,但是order属性被设置为before(因为是在insert之前执行),resultType根据主键实际类型设定。
<selectKey keyProperty="userId" order="BEFORE" resultType="java.lang.String">
SELECT uuid()
</selectKey>
<selectKey keyProperty="userId" order="BEFORE" resultType="java.lang.String">
SELECT 序列名.nextval() FROM DUAL
</selectKey>
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43296313/article/details/122980198
内容来源于网络,如有侵权,请联系作者删除!