Mybatis插入获取主键回填值
selectKey和useGeneratedKeys用法
selectKey
在Mybatis中的用法是
<insert id="insert" parameterType="com.xmaven.mybatis.entity.Goods">
INSERT INTO t_goods(title,
sub_title,
original_cost,
current_price,
discount,
is_free_delivery,
category_id)
VALUES (#{title} ,
#{subTitle} ,
#{originalCost},
#{currentPrice},
#{discount},
#{isFreeDelivery},
#{categoryId})
/*设置回填的key值 order控制在插入前还是插入后, 没有并发性的问题,也不会混乱*/
<selectKey resultType="Integer" keyProperty="goodsId" order="AFTER">
select last_insert_id()
</selectKey>
</insert>
useGeneratedKeys
在Mybatis中的用法
<!--
useGeneratedKeys 默认是false 不会自动获取主键,需要手动开启
keyProperty 就是那个实体类的属性名对应的主键
keyColumn 数据库表中的主键名称
-->
<!--演示userGeneratedKeys的用法-->
<insert id="insert2"
parameterType="com.xmaven.mybatis.entity.Goods"
useGeneratedKeys="true"
keyProperty="goodsId"
keyColumn="goods_id"
>
INSERT INTO t_goods(title,
sub_title,
original_cost,
current_price,
discount,
is_free_delivery,
category_id)
VALUES (#{title} ,
#{subTitle} ,
#{originalCost},
#{currentPrice},
#{discount},
#{isFreeDelivery},
#{categoryId})
</insert>
selectKey和useGeneratedKeys不同
二者区别--显示与隐示
selectKey标签需要明确编写获取最新的SQL语句
useGeneratedKeys属性会自动根据驱动来生成对应的SQL语句
二者区别--应用场景不同
selectKey适用于所有的关系型数据库
useGeneratedKeys只支持"自增主键"类型的数据库
在Oracle中selectKey的用法
<insert id="insert" parameterType="com.xmaven.mybatis.entity.Goods">
INSERT INTO 语句
<!--更新goods中的id-->
<selectKey resultType="Integer" keyProperty="goodsId" order="BEFORE">
select seq_goods.nextval as id from dual
</selectKey>
</insert>
总结:
selectKey标签是通用方案,使用于所有数据库,但编写麻烦
useGeneratedKeys属性只支持“自增主键”数据库,使用简单
评论区