• MyBatis使用MySQL数据库如何在执行insert操作后返回自增的主键


    数据库:MySQL5 

    create table play(iid int(10) not null primary key auto_increment,typeId int(3));

    Play.java:

    public class Play{

    private Integer iID;

            private Integer typeID;

    ...setter and getter省略... 

    play-mapper.xml:

    <mapper namespace="PlayDAO">

    <resultMap id="BaseResultMap" type="Play">

    <id column="iid" property="iID" jdbcType="INTEGER" />

    <result column="typeId" property="typeID" jdbcType="INTEGER" /> 

    </resultMap> 

    <insert id="insert" parameterType="Play">

    insert into play(typeId) values (#{typeID,jdbcType=INTEGER})

    <selectKey keyProperty="iID" resultType="int" order="AFTER">

    select LAST_INSERT_ID() 

    </selectKey> 

    </insert> 

    </mapper> 

    说明:

    1、 order="AFTER" 表示selectKey的动作在insert into...执行之后执行。

    2、为了说明问题,本例特别让java类中的属性名与xml配置文件中的column名不同,需要特别注意 selectKey的keyProperty属性必须是java类中的属性名。

    补充:

    在Oracle中的用法:先为主键创建一个序列 create sequence Play_Sequence increment by 1 start with 1 nomaxvalue;

    <insert id="insert" parameterType="Play"> 

          <selectKey  keyProperty="iID" resultType="int" order="BEFORE" >

             select  Play_Sequence.nextval from dual

          </selectKey> 

        insert into play( iid ,typeId) values ( #{ iID ,jdbcType=INTEGER} ,#{typeID,jdbcType=INTEGER}) 

     </insert> 

    说明:

    1、无需为序列创建触发器(trigger),order="BEFORE"确定了在插入数据之前取得主键,再将主键随其他字段一起插入即可。

    2、做了一个试验,在创建触发器的情况下,使selectKey的order="AFTER",再使selectKey选择序列的currval,发现currval还未加1。所以只能用1中的方法。

     参考:http://tx2099.iteye.com/blog/1413878

  • 相关阅读:
    java之 Timer 类的使用以及深入理解
    关于百度Editor富文本编辑器 自定义上传位置
    BufferedInputStream/BufferedOutputStream
    ByteArrayInputStream/ByteArrayOutputStream 学习
    Android之ViewPager 第二课
    Android之ViewPager 第一课
    内存四区模型
    变量的本质
    数据类型的本质
    File、Blob、ArrayBuffer等文件类的对象有什么区别和联系
  • 原文地址:https://www.cnblogs.com/mabaishui/p/2519806.html
Copyright © 2020-2023  润新知