mybatis 返回主键

mybatis返回主键

mybatis返回主键分为两种情况,第一种数据库支持自增主键,比如mysql、sqlserver;第二种是不支持自增主键,比如oracle


数据库支持自增主键(mysql、sqlserver)

使用insert、update标签中的useGeneratedKeys、keyProperty来获取主键返回值,useGeneratedKeys设置为true,keyProperty设置为主键对应实体类的属性值,如果是联合主键那么属性名用逗号隔开;insert时,返回的是新增记录的主键值、update时返回的时更新记录的主键值

这里拿insert举例,useGeneratedKeys="true" keyProperty="id"

 <insert id="insertSelective" parameterType="testmaven.entity.User" useGeneratedKeys="true" keyProperty="id">
  insert into user(name,age) values (#{name,jdbcType=VARCHAR},#{age,jdbcType=INTEGER}) 
 </insert>

同理,如果插入多条记录,只要设置了useGeneratedKeys、keyProperty,同样可以获取主键;

<insert id="insertBatch"  useGeneratedKeys="true" keyProperty="id">
      insert into user(name,age) values
      <foreach collection="list" separator=","  item="item">
         (#{item.name,jdbcType=VARCHAR},#{item.age,jdbcType=INTEGER}) 
      </foreach>
  </insert>

mybatis generator设置方法

我们通常使用generator插件来生成mapper,generator支持主键自动生成,就不需要一个个mapper文件设置了,只要在生成的时候配置一下就可以了。

<!-- !!!! Table Configurations !!!! -->
 <table tableName="ss_order"
        domainObjectName="Order"
        enableCountByExample="false"
        enableDeleteByExample="false"
        enableSelectByExample="false"
        enableUpdateByExample="false" >
    <generatedKey column="id" sqlStatement="MySql" identity="true" ></generatedKey>
 </table>

生成的mapper.xml带有useGeneratedKey信息

数据库不支持自增主键(oracle)

在数据库不支持自增主键情况下,需要使用selectKey来返回插入的主键值


selectKey属性

<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
            select last_insert_id() as id
 </selectKey>
属性名作用
resultTypeselectKey指定sql返回值类型
order执行顺序,after,表示后执行;before,表示限制性
keyProperty主键对应实体类中的属性名字

插入记录后,获取主键(如mysql)

selectKey中的order=after,代表先执行insert into,后执行selectKey。此处利用mysql的last_insert_id函数来获取最后一条记录的id

<insert id="insert" parameterType="com.mycat.test.model.Test">
        INSERT INTO test(name) VALUES(#{name,jdbcType=VARCHAR})
        <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
            select last_insert_id() as id
        </selectKey>
    </insert>

插入记录前,获取主键(如oracle)

注意,selectKey中的order=before,代表先执行selectKey,后执行insert into。此处利用sequence先获取id值,设置到sql中,然后返回主键。

<insert id="insert" parameterType="com.mycat.test.model.Test">
        INSERT INTO test(id,name) VALUES(#{id,jdbcType=INTEGER},
        #{name,jdbcType=VARCHAR})
        <selectKey resultType="java.lang.Integer" 
          order="before" keyProperty="id">
            select xx_sequence.nextval from dual
        </selectKey>
    </insert>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值