mybatis實現批量插入並返回主鍵(xml和註解兩種方法)
mybatis批量插入並返回主鍵(xml和註解兩種方法)
mybatis批量插入
在mysql數據庫中支持批量插入,所以隻要配置useGeneratedKeys和keyProperty就可以批量插入並返回主鍵瞭。
比如有個表camera,裡面有cameraNo,chanIndex,cameraName這三個字段,其中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,否則批量插入後會報錯說找不到”cameraNo”字段,而無法返回主鍵。
通過上面的xml形式或者註解形式的配置(我這是spring boot的項目,引入的mybatis-spring-boot-starter,采用的是註解形式),就可以批量插入並返回主鍵瞭,主鍵會被設置到Camera對象的cameraNo字段中。
cameraMapper.batchInsertCameras(cameras); for(Camera camera : cameras){ System.out.println(camera.getCameraNo()); }
執行批量插入時,需確保至少有一條待插入的記錄,否則會導致sql有誤而報錯。
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>
執行完這條語句之後,原來的users就會自動帶上主鍵userId。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 詳解mybatis插入數據後返回自增主鍵ID的問題
- mybatis update更新字段的使用操作
- MyBatis insert實體如何返回主鍵
- mybatis的selectKey作用詳解
- mybatis條件語句中帶數組參數的處理