mybatis批量插入并返回主键(xml和注解两种方式)

mybatis批量插入

在mysql数据库中支持批量插入,所以只要配置useGeneratedKeys和keyProperty就可以批量插入并返回主键了。

比如有个表camera,里面有cameraNo,chanIndex,cameraName这三个字段,其中cameraNo是自增主键。

下面是批量插入的Dao层接口:

void batchInsertCameras(@Param("list") List<Camera> cameras);

xml形式:

 
  1. <insert id="batchInsertCameras" useGeneratedKeys="true" keyProperty="cameraNo">

  2. insert into camera (chanIndex,cameraName)

  3. values

  4. <foreach collection="list" item="c" separator=",">

  5. (#{c.chanIndex},#{c.cameraName})

  6. </foreach>

  7. </insert>

注解形式:

 
  1. @Insert("<script>insert into camera (chanIndex,cameraName) values " +

  2. "<foreach collection='list' item='c' separator=','>(#{c.chanIndex},#{c.cameraName})</foreach></script>")

  3. @Options(useGeneratedKeys = true, keyProperty = "cameraNo")

  4. void batchInsertCameras(@Param("list") List<Camera> cameras);

注意:@Param里必须写成list, foreach的collection也必须写成list,否则批量插入后会报错说找不到"cameraNo"字段,而无法返回主键。

通过上面的xml形式或者注解形式的配置(我这是spring boot的项目,引入的mybatis-spring-boot-starter,采用的是注解形式),就可以批量插入并返回主键了,主键会被设置到Camera对象的cameraNo字段中。

 
  1. cameraMapper.batchInsertCameras(cameras);

  2. for(Camera camera : cameras){

  3. System.out.println(camera.getCameraNo());

  4. }

执行批量插入时,需确保至少有一条待插入的记录,否则会导致sql有误而报错。

 

转发自:https://blog.csdn.net/yjclsx/article/details/84318397

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值