您的位置:

mybatisplus批量新增详解

一、mybatisplus批量新增的方法

在使用mybatisplus批量新增的时候,我们通常会使用insertBatch方法。该方法可以将一批实体对象一次性插入到数据库中,而不必多次连接数据库。以下是使用insertBatch方法插入多条数据的示例代码:

List userList = new ArrayList<>();
User user1 = new User();
user1.setName("Tom");
user1.setAge(18);
User user2 = new User();
user2.setName("Jerry");
user2.setAge(20);
userList.add(user1);
userList.add(user2);
userService.saveBatch(userList);

  

以上代码将两个User实体对象装入List中,然后使用saveBatch方法将它们批量插入到数据库中。

二、mybatisplus批量新增数据

使用mybatisplus批量新增数据时,我们需要注意一下几点:

1、传入的对象集合不能为null或empty,否则会抛出NullPointerException。

2、数据在实际操作时,是会进行拆分的。当批量插入的数据量较大时,一般会自动将数据进行拆分成多个小批量操作,以避免一次性插入数据过多导致数据库出现性能问题。

3、若数据插入过程中出现唯一约束的异常,我们需要在代码中进行捕获和处理。

三、mybatisplus批量新增修改

当我们需要在数据库中批量修改数据时,也可以使用insertBatch方法。不同的是,此时我们需要将持久化实体改成UpdateWrapper对象,并且在UpdateWrapper对象中设置需要修改的字段和值。

List idList = new ArrayList<>();
idList.add(1L);
idList.add(2L);
userService.update(new UpdateWrapper<User>().set("age", 20).in("id",idList));

  

以上代码将把id为1和2的用户的age都修改成20。

四、mybatisplus批量新增原理

mybatisplus批量新增原理跟批量更新一样,都是通过拼接多条insert语句来实现的。

当我们调用insertBatch方法时,mybatisplus会先将list中的实体对象拆分成若干个小批量,每个小批量的大小由mybatisplus内置的默认值或自定义配置值决定。然后对每个小批量分别进行insert语句的拼接,并最终执行。

五、mybatisplus批量新增报错

在使用mybatisplus批量新增时,可能会出现如下报错:

1、NullPointerException:当list为null或者为空时,会出现空指针异常。

2、SQLException:当批量插入的数据过大时,可能会出现SQLException。

3、DataException: 当插入的数据格式有误时,可能会出现DataException。

在使用过程中,我们需要及时排查报错原因,根据日志进行错误处理和优化。

六、mybatisplus批量新增数据接口

在mybatisplus批量新增数据的过程中,我们通常会使用BaseMapper接口中的insertBatch()方法。以下是接口的定义:

/**
 * 批量插入
 *
 * @param entityList 实体对象列表
 * @return
 */
int insertBatch(@Param("list") Collection<T> entityList);

该方法接收一个List类型的参数,用于批量插入多个实体对象。

七、mybatisplus批量新增五万条要多久

mybatisplus批量新增五万条数据用了多长时间,这个问题的答案不是很确定。因为这一过程涉及到数据量、sql语句以及机器配置等多方面的因素,因此需要具体问题具体分析。在一般情况下,批量新增五万条数据并不会太耗时,可以根据实际需求适当调整一下批量数量。

八、mybatis批量更新

相比于mybatisplus批量新增,mybatis批量更新的方法是使用batch方法。以下是使用batch方法更新多条数据的示例代码:

SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List userList = new ArrayList<>();
User user1 = new User();
user1.setId(1);
user1.setName("Tom");
user1.setAge(20);
User user2 = new User();
user2.setId(2);
user2.setName("Jerry");
user2.setAge(22);
userList.add(user1);
userList.add(user2);
userMapper.batchUpdate(userList);
sqlSession.commit();

  

以上代码中,我们使用了SqlSession的batch模式,该模式可以一次性提交多个sql语句,提高了效率。batchUpdate方法接收一个List类型参数,用于批量更新多个实体对象。

九、mybatisplus批量更新

在mybatisplus中,批量更新的方法我们一般使用updateBatchById或者updateBatch。以下是updateBatchById方法的示例代码:

List userList = new ArrayList<>();
User user1 = new User();
user1.setId(1);
user1.setName("Tom");
user1.setAge(20);
User user2 = new User();
user2.setId(2);
user2.setName("Jerry");
user2.setAge(22);
userList.add(user1);
userList.add(user2);
userService.updateBatchById(userList);

  

以上代码中,我们使用了updateBatchById方法来批量更新多个实体对象的数据。

十、mybatisplus新增

在mybatisplus中,新增单个实体对象的方法我们一般使用save或者insert。以下是insert方法的示例代码:

User user = new User();
user.setName("Tom");
user.setAge(18);
userService.save(user);

以上代码中,我们使用了insert方法来插入一条实体对象的数据。