Mybatis Plus 实现批量插入
Mybatis Plus 的 IService 接口中提供了批量插入的方法,然而,它的内部实现逻辑竟然是这样的:
居然是循环单条插入?!逗人玩嘛,好吧,自己动手,丰衣足食。
一. 添加依赖
<!--mybatis plus extension,包含了mybatis plus core-->
<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;/*** @author: jichunyang* @description: 自定义数据方法注入* @date: 2020/12/18 14:15**/
public class EasySqlInjector extends DefaultSqlInjector {@Overridepublic 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@Beanpublic EasySqlInjector easySqlInjector() {return new EasySqlInjector();}@Bean("sqlSessionFactory")public SqlSessionFactory sqlSessionFactory() throws Exception {MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();// 其他配置项......sqlSessionFactory.setGlobalConfig(globalConfiguration());return sqlSessionFactory.getObject();}@Beanpublic 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> {/*** 批量插入 仅适用于mysql* @param entityList 实体列表* @return 影响行数*/Integer insertBatchSomeColumn(List<T> entityList);
}
五. 业务层面实现
修改业务 mapper 接口 UserMapper,继承刚刚扩展的 EasyBaseMapper
import org.apache.ibatis.annotations.Mapper;/*** @author jichunyang* @description 用户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@Transactionalpublic void insertUsers(List<User> users) {// 这里使用了自定义的批量插入,baseMapper可以直接使用,不需要声明baseMapper.insertBatchSomeColumn(users);}
}
IUserService 是定义的业务逻辑接口,和批量插入配置无关;
参考博客:https://www.cnblogs.com/thinkYi/p/13723035.html
Mybatis Plus关联博客:
SpringBoot + Mybatis Plus + Druid 实现多数据源切换和动态事务
MyBatis Plus 的自动填充数据功能
Mybatis Plus 实现批量插入相关推荐
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 参考文章: (1)Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 (2)https://www.cnblogs. ...
- Java mybatis实现mysql批量插入
记录下来方便自己,同时也希望能对比较迷惑的小盆友有所帮助 1.把批量插入的数据生成一个List集合 2.用java控制一次插入的条数和集合 // 每次插入10条int len = count, inc ...
- 16、mybatis动态sql 批量插入
文章目录 1.EmployeeMapper 2.EmployeeMapper.xml(以逗号间隔执行一条语句)(推荐) 3.Test 4.以分号间隔执行每条语句(第二种方式) 5.Oracle下的批量 ...
- MyBatis foreach语句批量插入数据
本例技术:Spring+SpringMVC+MyBatis+Oracle 问题描述:需要将程序里的一个集合保存到数据库里,集合的类型对应数据库的一个实体,若在程序里遍历集合再一条条保存到数据库表中有点 ...
- 转:Mybatis与JDBC批量插入数据库哪个更快
转自 http://www.cnblogs.com/fnz0/p/5713102.html, https://www.cnblogs.com/wxw7blog/p/8706797.html [转]: ...
- Mybatis 批量操作(批量插入、批量更新、批量删除)总结
文章目录 一.批量插入 二.批量更新 三.批量删除 一.批量插入 <insert id="insertBatch" parameterType="java.util ...
- mybatis以及mybatisplus批量插入问题
1. 思路分析: 批量插入是我们日常开放经常会使用到的场景,一般情况下我们也会有两种方案进行实施,如下所示. 方案一 就是用 for 循环循环插入: 优点:JDBC 中的 PreparedStatem ...
- mybatis逆向工程和批量插入
逆向工程 导包 <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>my ...
- MyBatis 使用 foreach 批量插入
yml文件 spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ ...
最新文章
- python基础教程:包的创建及导入
- ubuntu启动时自动挂载windows分区
- MySQL基础学习过程
- js/jquery学习笔记
- mysql数据库崩溃恢复_MySQL数据库表维护和崩溃恢复
- Python爬虫入门一综述
- SAP License:从前台接待看企业文化
- Qt环境下调用捷宇高拍仪OCX
- 领导给你安排任务,这三种话,越早说越好
- 强者的系统:高观点下的人生
- PHP+实验室安全系统 毕业设计 -附源码191610
- java-net-php-python-springbot学生奖惩管理系统计算机毕业设计程序
- 全球与中国椎弓根螺钉固定市场深度研究分析报告
- KDA,token.Kadena链的一些常识
- 华为荣耀系列移动终端产品分析和演进研究
- 六、MySQL之数据定义语言(一)
- 免疫的特异性和非特异性
- mysql同时查两张表数据库表_sql语句 同时查询两个表
- 成为一个程序员要花多长时间
- 【儿童节】2018 下半年 Java 后端工程师的书单推荐