Mybatis Plus 的 IService 接口中提供了批量插入的方法,然而,它的内部实现逻辑竟然是这样的:

居然是循环单条插入?!逗人玩嘛,好吧,自己动手,丰衣足食。
一. 添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.4.0</version>
</dependency>
二. 继承默认方法注入
在 injector 包下新建 EasysqlInjector.java

EasysqlInjector.java
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultsqlInjector;
import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import java.util.List;
public class EasysqlInjector extends DefaultsqlInjector {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
List<AbstractMethod> methodList = super.getMethodList(mapperClass);
methodList.add(new InsertBatchSomeColumn());
return methodList;
}
}
三. 在 MybatisPlusConfig 配置文件中注入 Bean
@EnableTransactionManagement
@Configuration
@MapperScan("扫描的mapper包路径")
public class MybatisPlusConfig {
@Bean
public EasysqlInjector easysqlInjector() {
return new EasysqlInjector();
}
@Bean("sqlSessionFactory")
public sqlSessionFactory sqlSessionFactory() throws Exception {
MybatissqlSessionfactorybean sqlSessionFactory = new MybatissqlSessionfactorybean();
......
sqlSessionFactory.setGlobalConfig(globalConfiguration());
return sqlSessionFactory.getObject();
}
@Bean
public GlobalConfig globalConfiguration() {
GlobalConfig conf = new GlobalConfig();
conf.setsqlInjector(easysqlInjector());
return conf;
}
}
四. 扩展自带 BaseMapper
在 mapper 包下新建 EasyBaseMapper 接口,扩展自带 BaseMapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
public interface EasyBaseMapper<T> extends BaseMapper<T> {
Integer insertBatchSomeColumn(List<T> entityList);
}
五. 业务层面实现
修改业务 mapper 接口 UserMapper,继承刚刚扩展的 EasyBaseMapper
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends EasyBaseMapper<User> {
}
service实现层的使用
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Override
@Transactional
public void insertUsers(List<User> users) {
baseMapper.insertBatchSomeColumn(users);
}
}
IUserService 是定义的业务逻辑接口,和批量插入配置无关;
参考博客:https://www.cnblogs.com/thinkYi/p/13723035.html
Mybatis Plus关联博客:
SpringBoot + Mybatis Plus + Druid 实现多数据源切换和动态事务
MyBatis Plus 的自动填充数据功能
欢迎关注我的公众号,用讲故事的方式学技术。
这里有脑洞大开的奇葩故事,也有温暖文艺的心灵感悟。
技术知识,也可以很有趣。
 (编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|