侧边栏壁纸
博主头像
Epoch

Java开发、Python爬虫、微服务、分布式、前端

  • 累计撰写 93 篇文章
  • 累计创建 110 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

Mybatis插入获取主键回填值

Epoch
2021-02-10 / 0 评论 / 0 点赞 / 305 阅读 / 441 字 / 正在检测是否收录...

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>

image-20210210221323509.png

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>

image-20210210221620302.png

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属性只支持“自增主键”数据库,使用简单
0

评论区