1.普通saveBatch批量插入 我们循环1万次,把每个实例员工对象装到员工集合(List)中,然后调用Mybatis-Plus的saveBatch方法,传入List集合,实现批量员工的插入,然后我们在方法开始结束的地方,计算当前函数执行时长。 @PostMapping("/addBath") @ResponseBody public CommonResult<Employee> addBath(){ long startTime = ...
第二和第三步优化:涉及归类,汇总,此时会有很多循环求和,循环赋值等等操作,使用分片+多线程方式,最终汇总到一个List<Object>,也优化到了5s内(1w+数据量循环效率比不上jdk的stream流,可以用arthas的trace分析) 第四步瓶颈:前两步已经把响应时间卡在了4-5s内能完成,但是入库操作非常耗时,1w+的数据量插入数据库,花...
try (SqlSession batchSqlSession = sqlSessionBatch()) { for (T anEntityList : entityList) { if (null != tableInfo && StringUtils.isNotEmpty(tableInfo.getKeyProperty())) { Object idVal = ReflectionKit.getMethodValue(cls, anEntityList, tableInfo.getKeyProperty()); if (StringUtils.checkValNull...
int batchSize){String sqlStatement=sqlStatement(SqlMethod.INSERT_ONE);int size=entityList.size();executeBatch(sqlSession->{int i=1;//遍历需要插入的数据列表,也即将数据想打包,然后执行批量操作for(Tentity:entityList){sqlSession.insert(sqlStatement,entity);if((i%batchSize==0)||i==size...
// 批量插入List<User> users =newArrayList<>();for(inti =0; i <5; i++) { User user =newUser(); user.setName("犬小哈"+ i); user.setAge(i); user.setGender(1); users.add(user); } boolean isSuccess = userService.saveBatch(users); ...
Mybatis Plus 伪批量插入 在前面《新增数据》小节中,我们已经知道了 Mybatis Plus 内部封装的批量插入savaBatch()是个假的批量插入,示例代码如下: List<User> users =newArrayList<>();for(inti =0; i <5; i++) { User user =newUser(); user.setName("犬小哈"+ i); ...
mybatis-plus 的批量插入方法saveBatch在实现的时候,似乎是逐条插入的: // ServiceImpl类中 public boolean saveBatch(Collection<T> entityList, int batchSize) { String sqlStatement = this.getSqlStatement(SqlMethod.INSERT_ONE); return this.executeBatch(entityList, batchSize, (sqlSession, entity) -> {...
replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。 3.批量插入或者更新(两种方式) 方式一:mybatis-plus的saveOrUpdateBatch方法 ...
* 原生批量插入 * @param list * @return */ int saveBatchByNative(@Param("list") List<UserInfo> list); } 代码语言:txt 复制 <insert id="saveBatchByNative" > INSERT INTO `t_user`(`name`,`age`,`descr`) VALUES <foreach collection="list" separator="," item="item"> ...
selectList(queryWrapper); 在这个例子中,我们通过lambda()方法获取到查询条件构造器,然后使用eq()方法添加等值条件。Entity::getId1和Entity::getId2表示实体类中的属性名。问题3:如何在MyBatis Plus中插入复合主键的数据?在MyBatis Plus中,可以使用BaseMapper的insert()方法插入数据。对于复合主键的插入,需要手动设置...