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

Mybatis @SelectKey用法解讀

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

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

注意

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

Mybatis selectKey 采坑筆記

1.現(xiàn)象描述

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

2.問題排查

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

<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 用法再認識

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

4.selectKey用法的坑

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

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

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

相關(guān)文章

最新評論

龙海市| 黄浦区| 克东县| 宁国市| 高安市| 萨嘎县| 宜君县| 渝北区| 巴林左旗| 茌平县| 井冈山市| 荥经县| 秦皇岛市| 双牌县| 渝北区| 定边县| 收藏| 崇左市| 海阳市| 张家界市| 济源市| 迭部县| 阿巴嘎旗| 海原县| 北票市| 南川市| 凤凰县| 拜城县| 离岛区| 海原县| 宁强县| 会宁县| 台东县| 洞口县| 噶尔县| 方正县| 武邑县| 罗山县| 惠东县| 阳西县| 从江县|