<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MyBatis 新增記錄并返回記錄主鍵

          應(yīng)用場(chǎng)景 在向數(shù)據(jù)庫(kù)插入數(shù)據(jù)時(shí),需要保留插入數(shù)據(jù)的id,以便進(jìn)行后續(xù)的update操作或者將id存入其他表作為外鍵。但是,在默認(rèn)情況下,insert操作返回的是一個(gè)int值,它并非表示主鍵id,而是表示當(dāng)前SQL語句影響的行數(shù)。

         接下來,我們依次從options注解和SQL兩個(gè)方面,了解MyBatis如何在使用MySQL和Oracle做insert插入操作時(shí)將返回的id綁定到對(duì)象中。

      Mybatis的@Options注解

          mybatis的@Options注解能夠拿到對(duì)象自增的id的值,能夠設(shè)置緩存時(shí)間,首先,創(chuàng)建一張用于測(cè)試的表instance。

      CREATE TABLE instance (
        instance_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
        infos VARCHAR(2048) NOT NULL DEFAULT '' COMMENT '消息',
        create_time datetime COMMENT '創(chuàng)建時(shí)間',
        update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
        PRIMARY KEY (instance_id)
      )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '實(shí)例表';

          其中的instance_id是自增的主鍵。我希望通過dao層的接口插入的數(shù)據(jù)能夠返回主鍵的id。接口代碼如下:

      @Insert("insert into instance (infos)"
                          + " ("
                          + " @{infos},"
                          + " NOW()"
                          + ")")
          @Options(useGeneratedKeys = true, keyProperty = "instanceId", keyColumn = "instance_id")
          int addInstance(Instance instanceDto);

          @Options注解中默認(rèn)設(shè)置的主鍵對(duì)應(yīng)的字段名為id,而在instance表中,主鍵為instance_id,因此需要將keyProperty和keyColumn設(shè)置成我們想要的字段。這個(gè)示例的意思就是,從instance_id這個(gè)字段把數(shù)據(jù)放到傳入對(duì)象instanceDto的instanceId成員變量里面。

          在調(diào)用了插入方法之后,@Options注解會(huì)自動(dòng)為表的主鍵字段設(shè)置自增的值,并把它賦值給作為入?yún)⒌腄TO,進(jìn)而可以直接從這個(gè)對(duì)象中獲取新生成記錄的主鍵。接下來看下@Option注解的源碼:

      @Retention(RetentionPolicy.RUNTIME)
      @Target({ElementType.METHOD})
      public @interface Options {
          boolean useCache() default true;
          boolean flushCache() default false;
          ResultSetType resultSetType() default ResultSetType.FORWARD_ONLY;
          StatementType statementType() default StatementType.PREPARED;
          int fetchSize() default -1;
          int timeout() default -1;
          boolean useGeneratedKeys() default false;
          String keyProperty() default "id";
          String keyColumn() default "";
      }

          注解中的useCache還可以設(shè)置緩存相關(guān)的選項(xiàng),useCache = true表示本次查詢結(jié)果被緩存以提高下次查詢速度,flushCache = false表示下次查詢時(shí)不刷新緩存,timeout = 10000表示查詢結(jié)果緩存10000秒。

          在文獻(xiàn)[2]中,Java API àMapper Annotations中可以找到英文原版介紹。

      從執(zhí)行insert SQL時(shí)返回主鍵ID

          MySQL用法:

      <insert id="insert" parameterType="com.test.Instance"  keyProperty=" instanceId" useGeneratedKeys="true" >

          上面配置中,“keyProperty”表示返回的instance_id要保存到對(duì)象的那個(gè)屬性中,“useGeneratedKeys”表示主鍵為自增長(zhǎng)模式。

          MySQL中做以上配置就OK了,較為簡(jiǎn)單,不再贅述。下面分享Oracle中的用法。

      <insert id="insert" parameterType="com.test.Instance ">
         <selectKey resultType="Long" order="BEFORE" keyProperty="instanceId">  
             SELECT SEQ_USER.NEXTVAL as instanceId from DUAL
         </selectKey> 
          insert into instance (instance_id, infos, create_time)
          values (#{instanceId}, #{infos}, now())
      </insert>

          Oracle用法中,需要注意的是:由于Oracle沒有自增長(zhǎng)一說法,只有序列這種模仿自增的形式,所以不能再使用“useGeneratedKeys”屬性,而是使用<selectKey>將ID獲取并賦值到對(duì)象的屬性中,insert插入操作時(shí)正常插入id。

      參考文獻(xiàn)

      [1] http://www.rzrgm.cn/sonofelice/p/6250203.html.

      [2] http://www.mybatis.org/mybatis-3/index.html.

       

      posted @ 2018-12-30 22:10  樓蘭胡楊  閱讀(11872)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 日韩欧美在线综合网另类| 一本无码人妻在中文字幕免费| 日本精品极品视频在线| 亚洲AV永久中文无码精品综合| 色色97| 狠狠色丁香婷婷综合| 精品国产精品国产偷麻豆| 霍林郭勒市| 免费无码一区无码东京热| 亚洲成A人片在线观看无码不卡 | 蜜桃无码一区二区三区| 亚洲国产精品综合久久网络| 久热这里只有精品6| 亚洲国产高清aⅴ视频| 亚洲中文字幕人妻系列| 亚洲精品乱码久久久久久中文字幕| 国产自国产自愉自愉免费24区 | 成人免费亚洲av在线| 开心色怡人综合网站| 久久国产免费观看精品| 国产一区二区丰满熟女人妻| 亚洲婷婷综合色高清在线| 中文字幕亚洲综合久久| 97人妻成人免费视频| 国产在线精品中文字幕| 国产99在线 | 免费| 亚洲高清最新AV网站| 无码va在线观看| 精品国产一区二区三区性色| 亚洲成人av在线系列| 国产国产午夜福利视频| 人妻精品久久无码区 | 乱老年女人伦免费视频| 亚洲一区久久蜜臀av| 4虎四虎永久在线精品免费| 亚洲午夜福利网在线观看 | 亚洲精品无码日韩国产不卡av| 婷婷丁香五月亚洲中文字幕| 99久9在线视频 | 传媒| 亚洲一区二区三区自拍偷拍| 无码一级视频在线|