数据库讨论(一)mybatis获取当前插入记录的id

问题:mybatis会自动生成一个insert方法如(用的是MySQL数据库):

  <insert id="insert" parameterType="cn.hnne.iclt.model.Task" >
    <selectKey resultType="java.lang.Integer" keyProperty="ictl_otaid" order="BEFORE" >
      SELECT LAST_INSERT_ID() AS ID
    </selectKey>
    insert into .....)
    values (...)
  </insert>

但是直接调用此方法,在记录插入之后在去getTaskID(),得到的是null或者0。

在网上查了很多资料都没有真正解决方案,没有写到实处的,现在写下自己总结分享一下大笑

先分析原理再给出解决办法

insert这几个字段:resultType是查询进行select映射的时候返回类型。其中配置文件中的parameterType是可以不配置的,mybatis会自动传入的。这两个不是重点。

selectKey是返回主键,在Action获得主键就是通过get方法就可以拿到task.getTaskID(),但是有时自动生成的拿不到;

解决:1、里面的keyProperty="otaid"的字段与实体(model)的属性对应,这是mybatis的映射机制。

           2、SELECT LAST_INSERT_ID() AS ID,不是数据库的属性字段名,同样要给model中的实体属性名。

          3、 Order="BEFORE" 如果 是Before那个拿到的是插入前的主键,那么就是初始值null或者是0。

                        那么把它设置after,那就是拿到插入后自动增长的主键值。

下面是修改后的Mapper.xml的代码。

<insert id="insert" parameterType="cn.hnne.iclt.model.Task" >
    <selectKey resultType="int" keyProperty="otaid"order="AFTER" >
      SELECT LAST_INSERT_ID() AS otaid
    </selectKey>
    insert into .....
  </insert>

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值