简单的实现 mybatisplus实现真实的批量插入

总所周知,mybatisplus 的saveBatch()是一个伪批量插入,性能比较差。真实的批量插入需要for循环读取value 拼装成一条insert语句才插入。下面我将简单的介绍 使用mybatisplus实现真实的批量的步骤。

1.引入依赖,3.4.0之上的版本都可以

        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.2
        

2.新建InsertBatchSqlInjector 类

@Component
public class InsertBatchSqlInjector extends DefaultSqlInjector {
  @Override
  public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
    List<AbstractMethod> methodList = super.getMethodList(mapperClass);
    methodList.add(new InsertBatchSomeColumn());
    return methodList;
  }
}

3.创建CustomBaseMapper接口

public interface CustomBaseMapper<T> extends BaseMapper<T> {

    /**
     * 批量插入
     * @param entityList 要插入的数据
     * @return 成功插入的数据条数
     */
    int insertBatchSomeColumn(List<T> entityList);
}

4.把CustomBaseMapper当成BaseMapper使用即可

需要在dao层或mapper层去继承CustomBaseMapper,如:
public interface TStudentDao extends CustomBaseMapper

5.通过basemapper使用即可

this.baseMapper.insertBatchSomeColumn(studentEntityList);
或者直接注入
@Autowired
TStudentDao studentDao
studentDao.insertBatchSomeColumn(studentEntityList);

最终配置sql日志,即可看到效果
mybatis:
#mapper配置文件
mapper-locations: classpath:mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
日志
在这里插入图片描述
可以看到一条sql更新了两个记录

你可能感兴趣的:(mysql,java)