mybatisplus批量插入數據


對於mybatis-plus的批量操作,一句話:少量數據可以使用,大量數據建議手寫sql

不建議mybatis-plus使用批量操作,也是循環一條一條操作。廢話不多說上demo。

1.導入依賴

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>

2.Dao層

package cn.mindgd.mapper;

import cn.mindgd.domain.WarehouseDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface WarehouseDetailMapper extends BaseMapper<WarehouseDetail> {


/**
* @author: JiaXinMa
* @description: 批量插入
* @date: 2021/8/27
*/
@Insert("<script>" +
"INSERT INTO warehouse_detail(warehouse_record_id,material_id,a_number,b_number)VALUES" +
"<foreach collection='warehouseDetails' item='warehouseDetail' separator=','> " +
"(#{warehouseDetail.warehouseRecordId},#{warehouseDetail.materialId},#{warehouseDetail.aNumber},#{warehouseDetail.bNumber})" +
"</foreach> " +
"</script>")//批量建議手寫sql
boolean insertBatch(@Param("warehouseDetails") List<WarehouseDetail> warehouseDetails);
}

3.業務層

package cn.mindgd.service;

import cn.mindgd.domain.WarehouseDetail;
import com.baomidou.mybatisplus.extension.service.IService;

public interface WarehouseDetailService extends IService<WarehouseDetail> {
}

4.業務實現層

package cn.mindgd.service.impl;

import cn.mindgd.domain.WarehouseDetail;
import cn.mindgd.mapper.WarehouseDetailMapper;
import cn.mindgd.service.WarehouseDetailService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


@Service
@Transactional
public class WarehouseDetailServiceImpl extends ServiceImpl<WarehouseDetailMapper, WarehouseDetail> implements WarehouseDetailService {
}

5.測試

    @Test
public void testSaveBatch() {
List<WarehouseDetail> ws = new ArrayList<>();
for (int i = 0; i < 100000; i++) {
WarehouseDetail warehouseDetail = new WarehouseDetail();
warehouseDetail.setWarehouseRecordId(i);
warehouseDetail.setANumber(i + 10.2);
warehouseDetail.setBNumber(i + 11.2);
ws.add(warehouseDetail);
}
long start = System.currentTimeMillis();
warehouseDetailMapper.insertBatch(ws);//自己寫的sql
// warehouseDetailService.saveBatch(ws);//mybatis-plus的方法
long end = System.currentTimeMillis();

System.out.println("耗時:"+ (end-start)+"毫秒");
}

 6.效果:

調用mybatis-plus,批量插入少量數據可以用。

 

 調用自己寫的,大量數據建議手寫sql

 

 

 

 

 

 

想看更多精彩內容,可以關注我的CSDN

我的CSDN


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM