mybatis實(shí)現(xiàn)批量插入并返回主鍵(xml和注解兩種方法)
mybatis批量插入并返回主鍵(xml和注解兩種方法)
mybatis批量插入
在mysql數(shù)據(jù)庫中支持批量插入,所以只要配置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里必須寫成list, foreach的collection也必須寫成list,否則批量插入后會(huì)報(bào)錯(cuò)說找不到"cameraNo"字段,而無法返回主鍵。
通過上面的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類型
<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í)行完這條語句之后,原來的users就會(huì)自動(dòng)帶上主鍵userId。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java并發(fā)編程之閉鎖與柵欄的實(shí)現(xiàn)
這篇文章主要介紹了Java并發(fā)編程之閉鎖與柵欄的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Java8中新特性O(shè)ptional、接口中默認(rèn)方法和靜態(tài)方法詳解
Java 8 已經(jīng)發(fā)布很久了,很多報(bào)道表明Java 8 是一次重大的版本升級(jí)。下面這篇文章主要給大家介紹了關(guān)于Java8中新特性O(shè)ptional、接口中默認(rèn)方法和靜態(tài)方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12解決微服務(wù)下Mybatis?xml無效綁定問題及分析Invalid?bound?statement
這篇文章主要介紹了解決微服務(wù)下Mybatis?xml無效綁定問題及分析Invalid?bound?statement,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11JSP 開發(fā)之 releaseSession的實(shí)例詳解
這篇文章主要介紹了JSP 開發(fā)之 releaseSession的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-07-07使用JAVA8 filter對(duì)List多條件篩選的實(shí)現(xiàn)
這篇文章主要介紹了使用JAVA8 filter對(duì)List多條件篩選的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03mongo分布式鎖Java實(shí)現(xiàn)方法(推薦)
下面小編就為大家?guī)硪黄猰ongo分布式鎖Java實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07