日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

mybatis的SelectKey属性的作用

發(fā)布時(shí)間:2024/1/23 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis的SelectKey属性的作用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?視頻課堂?https://edu.csdn.net/course/play/8034

SelectKey在Mybatis中是為了解決Insert數(shù)據(jù)時(shí)不支持主鍵自動(dòng)生成的問(wèn)題,他可以很隨意的設(shè)置生成主鍵的方式。

?使用mybatis的selectKey就可以得到sequence的值,同時(shí)也會(huì)將值返回。不過(guò)對(duì)于不同的數(shù)據(jù)庫(kù)有不同的操作方式。

屬性描述
keyPropertyselectKey 語(yǔ)句結(jié)果應(yīng)該被設(shè)置的目標(biāo)屬性。
resultType結(jié)果的類型。MyBatis 通常可以算出來(lái),但是寫上也沒(méi)有問(wèn)題。MyBatis 允許任何簡(jiǎn)單類型用作主鍵的類型,包括字符串。
order這可以被設(shè)置為 BEFORE 或 AFTER。如果設(shè)置為 BEFORE,那么它會(huì)首先選擇主鍵,設(shè)置 keyProperty 然后執(zhí)行插入語(yǔ)句。如果設(shè)置為 AFTER,那么先執(zhí)行插入語(yǔ)句,然后是 selectKey 元素-這和如 Oracle 數(shù)據(jù)庫(kù)相似,可以在插入語(yǔ)句中嵌入序列調(diào)用。
statementType和前面的相 同,MyBatis 支持 STATEMENT ,PREPARED 和CALLABLE 語(yǔ)句的映射類型,分別代表 PreparedStatement 和CallableStatement 類型。

?

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

像Oracle這樣取序列的情況,需要設(shè)置為before,否則會(huì)報(bào)錯(cuò)。

下面是一個(gè)xml和注解的例子,SelectKey很簡(jiǎn)單,兩個(gè)例子就夠了:

<insert id="insert" parameterType="map"> insert into table1 (name) values (#{name}) <selectKey resultType="java.lang.Integer" keyProperty="id"> CALL IDENTITY() </selectKey> </insert>

上面xml的傳入?yún)?shù)是map,selectKey會(huì)將結(jié)果放到入?yún)?shù)map中。用POJO的情況一樣,但是有一點(diǎn)需要注意的是,keyProperty對(duì)應(yīng)的字段在POJO中必須有相應(yīng)的setter方法,setter的參數(shù)類型還要一致,否則會(huì)報(bào)錯(cuò)。

? 對(duì)于oracle:?

<insert id="insertUser" parameterClass="XXX.User"> <selectKey resultClass="long" keyProperty="id"order="BEFORE"> select SEQ_USER_ID.nextval as id from dual </selectKey> insert into user (id,name,password) values (#{id},#{name},#{password}) </insert>

這句話會(huì)在插入user之前執(zhí)行(order="BEFORE"),該句話執(zhí)行完之后,會(huì)生成一個(gè)ID,傳進(jìn)來(lái)的參數(shù)User對(duì)象里的id字段就會(huì)被賦值成sequence的值。?

對(duì)于mysql?

<insert id="insertUser" parameterClass="XXX.User"> insert into user (name,password) values (#{id},#{name},#{password}) <selectKey resultClass="long" keyProperty="id" order="after"> SELECT LAST_INSERT_ID() AS ID </selectKey> </insert>

? ?將selectKey放在insert之后,通過(guò)LAST_INSERT_ID() 獲得剛插入的自動(dòng)增長(zhǎng)的id的值。插入之后獲得ID賦值到傳進(jìn)來(lái)的對(duì)象中(對(duì)象中必須有相應(yīng)的屬性)。

像如下本身是Mysql或SqlServer的數(shù)據(jù)庫(kù),沒(méi)有必要這樣使用,有點(diǎn)浪費(fèi)。

<!--保存用戶--><insert id="saveUser" parameterType="com.aaa.entity.User"><selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">select last_insert_id()</selectKey>insert user(id,name,birth,gender,address)values(#{id},#{name},#{birth},#{gender},#{address})</insert>

報(bào)錯(cuò):Field 'id' doesn't have a default value

配置了SELECT LAST_INSERT_ID()后,需要把表結(jié)構(gòu)的id字段設(shè)置為自增屬性AUTO_INCREMENT
以上

總結(jié)

以上是生活随笔為你收集整理的mybatis的SelectKey属性的作用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。