MyBatis如何获取新插入数据主键?

MyBatis如何获取新插入数据主键?

插入一条数据到之后,我们总是想用这条新纪录的ID做点别的事情,但大量的现实告诉我们新增修改删除方法返回值永远都是受到影响的行数!并且有的土豪公司用的可能不是MySql,或许是Oracle呢?Oracle数据库可是没有自增主键的说法,人家是通过序列获值的方法作为该新增记录的主键。那么我们该如何获取到数据主键呢?

1、MySql中获取数据库主键的两种方式

1.1、使用useGenerateKey的方式

底层用的是JDBCgetGenerateKeys()方法来取出数据库内部生成的主键

 <!--新增用户-使用useGenerateKey得到用户主键-->
    <insert id="insert2" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
        insert into sys_user(
            user_name,
            user_password,
            user_email,
            user_info,
            head_img,
            create_time
        )
        values(
                  #{userName},
                  #{userPassword},
                  #{userEmail},
                  #{userInfo},
                  #{headImg,jdbcType=BLOB},
                  #{createTime,jdbcType=TIMESTAMP}
              )
    </insert>

1.2、使用使用selectKey的方式

这种方式适合用于不提供主键自增功能的数据库,也适用于提供了主键自增功能的数据库

 <!--新增用户-使用selectKey的方式-->
    <insert id="insert3">
        insert into sys_user(
            user_name,
            user_password,
            user_email,
            user_info,
            head_img,
            create_time
        )
        values(
                  #{userName},
                  #{userPassword},
                  #{userEmail},
                  #{userInfo},
                  #{headImg,jdbcType=BLOB},
                  #{createTime,jdbcType=TIMESTAMP}
              )
        <selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
    </insert>

2、针对Oracle数据库获取主键的方式

order=“BEFORE”,因为Oracle是先通过序列得到值,直接把值插入到数据库,必须在插入Sql执行之前把这个主键拿到手!

 <!--新增用户-使用selectKey的方式-->
    <insert id="insert3">
          <selectKey keyColumn="id" resultType="long" keyProperty="id" order="BEFORE">
            SELECT SQE_ID.mextval from dual
        </selectKey>
        insert into sys_user(
            user_name,
            user_password,
            user_email,
            user_info,
            head_img,
            create_time
        )
        values(
                  #{userName},
                  #{userPassword},
                  #{userEmail},
                  #{userInfo},
                  #{headImg,jdbcType=BLOB},
                  #{createTime,jdbcType=TIMESTAMP}
              )
    </insert>

3、其他数据库获取主键的方式

观察MySqlOracle的变化得知,SelectKey标签是一个通用的方法,适用于各种数据库。只需修改里面不同查询主键的语句即可!

列举一些可以数据库回写主键的SQL

DB2 VALUES IDENTITY_VAL_LOCAL()
SQLSERVER SELECT SCOPE_IDENTITY()
CLOUDSCAPE VALUES IDENTITY_VAL_LOCAL()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值