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

2023-12-13 04:17:50

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

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

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

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更新了两个记录

文章来源:https://blog.csdn.net/qq_56533553/article/details/134955942
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。