mybatis實(shí)現(xiàn)批量插入并返回主鍵(xml和注解兩種方法)
mybatis批量插入并返回主鍵(xml和注解兩種方法)
mybatis批量插入
在mysql數(shù)據(jù)庫(kù)中支持批量插入,所以只要配置useGeneratedKeys和keyProperty就可以批量插入并返回主鍵了。
比如有個(gè)表camera,里面有cameraNo,chanIndex,cameraName這三個(gè)字段,其中cameraNo是自增主鍵。
下面是批量插入的Dao層接口:
void batchInsertCameras(@Param("list") List<Camera> cameras);
xml形式
<insert id="batchInsertCameras" useGeneratedKeys="true" keyProperty="cameraNo">
insert into camera (chanIndex,cameraName)
values
<foreach collection="list" item="c" separator=",">
(#{c.chanIndex},#{c.cameraName})
</foreach>
</insert>
注解形式
@Insert("<script>insert into camera (chanIndex,cameraName) values " +
"<foreach collection='list' item='c' separator=','>(#{c.chanIndex},#{c.cameraName})</foreach></script>")
@Options(useGeneratedKeys = true, keyProperty = "cameraNo")
void batchInsertCameras(@Param("list") List<Camera> cameras);
注意:@Param里必須寫(xiě)成list, foreach的collection也必須寫(xiě)成list,否則批量插入后會(huì)報(bào)錯(cuò)說(shuō)找不到"cameraNo"字段,而無(wú)法返回主鍵。
通過(guò)上面的xml形式或者注解形式的配置(我這是spring boot的項(xiàng)目,引入的mybatis-spring-boot-starter,采用的是注解形式),就可以批量插入并返回主鍵了,主鍵會(huì)被設(shè)置到Camera對(duì)象的cameraNo字段中。
cameraMapper.batchInsertCameras(cameras);
for(Camera camera : cameras){
System.out.println(camera.getCameraNo());
}

執(zhí)行批量插入時(shí),需確保至少有一條待插入的記錄,否則會(huì)導(dǎo)致sql有誤而報(bào)錯(cuò)。
mybatis批量插入并返回主鍵筆記
mapper中的代碼
int insertBatchUserReturnId(List<User> users);
也可以在形參前面加上@Param("xxxx")
xml中的代碼,collection必須填list類(lèi)型
<insert id="insertBatchUserReturnId" keyProperty="userId" useGeneratedKeys="true">
insert into message (user_id, user_name, user_type, user_passwd, user_phone,user_pic,user_address)
values
<foreach collection="list" item="item" open="(" close=")" separator=",">
#{item.userId,jdbcType=INTEGER}, #{item.userName,jdbcType=VARCHAR}, #{item.userType,jdbcType=TINYINT},
#{item.userPasswd,jdbcType=VARCHAR}, #{item.userPhone,jdbcType=VARCHAR},
#{item.userPic,jdbcType=VARCHAR},#{item.userAddress,jdbcType=VARCHAR}
</foreach>
</insert>
執(zhí)行完這條語(yǔ)句之后,原來(lái)的users就會(huì)自動(dòng)帶上主鍵userId。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決創(chuàng)建springboot后啟動(dòng)報(bào)錯(cuò):Failed?to?bind?properties?under‘spri
在Spring?Boot項(xiàng)目中,application.properties和application.yml是用于配置參數(shù)的兩種文件格式,properties格式簡(jiǎn)潔但不支持層次結(jié)構(gòu),而yml格式支持層次性,可讀性更好,在yml文件中,要注意細(xì)節(jié),比如冒號(hào)后面需要空格2024-10-10
Spring Boot啟動(dòng)過(guò)程完全解析(一)
這篇文章主要介紹了Spring Boot啟動(dòng)過(guò)程完全解析(一),需要的朋友可以參考下2017-04-04
springboot實(shí)現(xiàn)自動(dòng)郵件發(fā)送任務(wù)詳解
這篇文章主要介紹了Springboot中的郵件任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-04-04
Java項(xiàng)目如何打包成Jar的實(shí)現(xiàn)步驟
一般情況下我們都是使用Java項(xiàng)目直接部署發(fā)布,有時(shí)需要我們將寫(xiě)好的項(xiàng)目打成jar包,方便后期調(diào)用,本文主要介紹了Java項(xiàng)目如何打包成Jar,感興趣的可以了解一下2023-11-11
SpringMVC通過(guò)RESTful結(jié)構(gòu)實(shí)現(xiàn)頁(yè)面數(shù)據(jù)交互
RESTFUL是一種網(wǎng)絡(luò)應(yīng)用程序的設(shè)計(jì)風(fēng)格和開(kāi)發(fā)方式,基于HTTP,可以使用XML格式定義或JSON格式定義。RESTFUL適用于移動(dòng)互聯(lián)網(wǎng)廠商作為業(yè)務(wù)接口的場(chǎng)景,實(shí)現(xiàn)第三方OTT調(diào)用移動(dòng)網(wǎng)絡(luò)資源的功能,動(dòng)作類(lèi)型為新增、變更、刪除所調(diào)用資源2022-08-08
Rabbitmq延遲隊(duì)列實(shí)現(xiàn)定時(shí)任務(wù)的方法
這篇文章主要介紹了Rabbitmq延遲隊(duì)列實(shí)現(xiàn)定時(shí)任務(wù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05

