mybatis获取当前插入记录的id

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

  <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。 mybatis

在网上查了不少资料都没有真正解决方案,没有写到实处的,如今写下本身总结分享一下大笑app

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

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

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

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

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

          三、 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>

相关文章
相关标签/搜索