最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis @SelectKey用法解讀

 更新時(shí)間:2021年09月24日 09:21:37   作者:SihgYu  
這篇文章主要介紹了Mybatis @SelectKey用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mybatis @SelectKey用法

用處

主要用來解決主鍵自增問題

用法

@SelectKey(statement="SELECT LAST_INSERT_ID()", keyProperty="clusterId", before=false, resultType=Integer.class)

屬性

  • keyProperty 語句結(jié)果被設(shè)置的屬性
  • resultType 結(jié)果的類型
  • order 可以被設(shè)置為before和after 如果設(shè)置為 BEFORE,那么它會(huì)首先選擇主鍵,設(shè)置 keyProperty 然后執(zhí)行插入語句。如果設(shè)置為 AFTER,那么先執(zhí)行插入語句,然后是 selectKey 元素-這和如 Oracle 數(shù)據(jù)庫相似,可以在插入語句中嵌入序列調(diào)用。
  • statement 和前面的相 同,MyBatis 支持 STATEMENT ,PREPARED 和CALLABLE 語句的映射類型,分別代表 PreparedStatement 和CallableStatement 類型。

注意

SelectKey需要注意order屬性,像Mysql一類支持自動(dòng)增長(zhǎng)類型的數(shù)據(jù)庫中,order需要設(shè)置為after才會(huì)取到正確的值。像Oracle這樣取序列的情況,需要設(shè)置為before,否則會(huì)報(bào)錯(cuò)。像Oracle這樣取序列的情況,需要設(shè)置為before,否則會(huì)報(bào)錯(cuò)。

Mybatis selectKey 采坑筆記

1.現(xiàn)象描述

觀察某張表的數(shù)據(jù)時(shí),發(fā)現(xiàn)設(shè)置了自增屬性的AutoId,在插入數(shù)據(jù)后并不是自增的,而是數(shù)值跳躍著增加的。

2.問題排查

在確認(rèn)AutoId的自增屬性設(shè)置沒有問題后,開始懷疑是不是insert語句的問題,insert語句是MyBatis Generator自動(dòng)生成的,示例如下:

<insert id="insert" parameterType="com.xx.yy.datasource.domain.User" >
  <selectKey resultType="java.lang.Long" keyProperty="autoId" order="BEFORE" >
  SELECT LAST_INSERT_ID()
</selectKey>
  insert into User (AutoId, UserId, Mobile, Username, CreateTime, LastModifyTime)
  values (#{autoId,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, #{mobile,jdbcType=VARCHAR}, 
   #{username,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{lastModifyTime,jdbcType=TIMESTAMP}
   )
 </insert>

insert into 語句在語法上是沒有問題的,那縮小排查范圍,就是selectKey的用法可能有問題!

3. selectKey 用法再認(rèn)識(shí)

  • resultType表示的是返回主鍵的類型
  • keyProperty對(duì)應(yīng)的domain 對(duì)象中需要被賦值的屬性,一般是主鍵
  • order如果設(shè)置為 BEFORE,那么它會(huì)首先選擇主鍵,設(shè)置 keyProperty 然后執(zhí)行插入語句。如果設(shè)置為 AFTER,那么先執(zhí)行插入語句,然后是 selectKey 元素

4.selectKey用法的坑

SelectKey需要注意order屬性,像MySQL一類支持自動(dòng)增長(zhǎng)類型的數(shù)據(jù)庫中,order需要設(shè)置為after才會(huì)取到正確的值,像Oracle這樣取序列的情況,需要設(shè)置為before。

在上面示例的insert用法中,就是order屬性設(shè)置成了BEFORE才導(dǎo)致自增屬性沒有生效。改成AFTER后,主鍵就開始自增了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

黑河市| 桃源县| 明星| 华容县| 犍为县| 荔波县| 北宁市| 双辽市| 武清区| 丰宁| 工布江达县| 静宁县| 左云县| 湖口县| 永州市| 东阿县| 梁山县| 青川县| 上杭县| 垫江县| 独山县| 江都市| 斗六市| 江山市| 平遥县| 海丰县| 微博| 凤山县| 东至县| 合肥市| 子长县| 万年县| 大同市| 福鼎市| 西和县| 山东省| 枣阳市| 张家口市| 凤翔县| 东源县| 宾川县|