返回

入门!非Spring环境Mybatis-Plus批量插入及批量返回主键到实体

后端

在非Spring环境下使用MyBatis-Plus进行批量插入数据的指南

批量插入简介

在软件开发中,我们经常需要将大量数据导入到数据库中。MyBatis-Plus是一个流行的ORM框架,提供了强大的批量插入功能,即使在非Spring环境下也能轻松实现。本文将介绍两种在非Spring环境下使用MyBatis-Plus进行批量插入数据的方法。

方式一:使用MyBatis的insert()方法

  • 创建SqlSession对象: 首先,我们需要创建一个MyBatis的SqlSession对象。SqlSession是MyBatis用来执行SQL语句和管理事务的接口。

  • 准备数据列表: 接下来,准备一个要插入的数据列表。该列表中的每个元素都应该是包含要插入数据的实体类实例。

  • 使用insert()方法进行批量插入: 使用SqlSession对象的insert()方法进行批量插入。insert()方法的第一个参数是映射语句的ID,第二个参数是要插入的数据列表。

  • 提交事务: 最后,提交事务以将数据永久保存到数据库中。

代码示例:

// 创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();

// 准备数据列表
List<User> userList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
    User user = new User();
    user.setName("小明" + i);
    user.setAge(20 + i);
    userList.add(user);
}

// 使用insert()方法进行批量插入
int[] result = sqlSession.insert("com.example.dao.UserDao.batchInsert", userList);

// 提交事务
sqlSession.commit();

// 关闭SqlSession对象
sqlSession.close();

方式二:使用MyBatis-Plus的saveBatch()方法

  • 创建Mapper对象: 首先,创建一个MyBatis-Plus的Mapper对象。Mapper对象提供了数据库操作的接口。

  • 准备数据列表: 同上,准备一个要插入的数据列表。

  • 使用saveBatch()方法进行批量插入: 使用Mapper对象的saveBatch()方法进行批量插入。saveBatch()方法的参数是数据列表。

  • 返回插入条数: saveBatch()方法会返回一个int值,表示插入的条数。

代码示例:

// 创建Mapper对象
UserDao userDao = mybatisPlusContext.getBean(UserDao.class);

// 准备数据列表
List<User> userList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
    User user = new User();
    user.setName("小明" + i);
    user.setAge(20 + i);
    userList.add(user);
}

// 使用saveBatch()方法进行批量插入
int count = userDao.saveBatch(userList);

返回主键

批量插入完成后,我们可能需要获取插入数据的ID。MyBatis和MyBatis-Plus提供了两种方法来获取主键:

方式一:使用MyBatis的selectKey()方法

  • 在mapper.xml文件中配置selectKey节点: 在MyBatis的mapper.xml文件中配置一个selectKey节点,用于获取插入数据的ID。

  • 在Java代码中使用selectKey()方法: 在Java代码中使用SqlSession对象的selectKey()方法获取ID。

代码示例:

// 在mapper.xml文件中配置selectKey节点
<selectKey keyProperty="id" order="BEFORE" resultType="int">
    SELECT LAST_INSERT_ID()
</selectKey>

// 在Java代码中使用selectKey()方法
int[] result = sqlSession.insert("com.example.dao.UserDao.batchInsert", userList);

方式二:使用MyBatis-Plus的getKeyList()方法

  • 在实体类中添加@TableId注解: 在MyBatis-Plus的实体类中添加@TableId注解,指定主键字段。

  • 在Java代码中使用getKeyList()方法: 在Java代码中使用Mapper对象的getKeyList()方法获取ID列表。

代码示例:

// 在实体类中添加@TableId注解
@TableId(type = IdType.AUTO)
private Integer id;

// 在Java代码中使用getKeyList()方法
List<Integer> keyList = userDao.getKeyList(userList);

总结

本文介绍了两种在非Spring环境下使用MyBatis-Plus进行批量插入数据的方法,并提供了获取主键的两种方式。开发者可以根据自己的需求选择合适的方法。

常见问题解答

1. 什么是批量插入?

批量插入是指一次性向数据库插入多个数据记录的操作。

2. 为什么需要批量插入?

批量插入可以显著提高数据库插入数据的效率,尤其是在需要插入大量数据时。

3. MyBatis-Plus的saveBatch()方法和insert()方法有什么区别?

saveBatch()方法是MyBatis-Plus提供的批量插入方法,而insert()方法是MyBatis提供的批量插入方法。saveBatch()方法可以自动生成主键,而insert()方法需要手动指定主键。

4. 如何获取插入数据的ID?

MyBatis和MyBatis-Plus提供了两种方法来获取插入数据的ID:selectKey()方法和getKeyList()方法。selectKey()方法需要在mapper.xml文件中配置,而getKeyList()方法需要在实体类中添加@TableId注解。

5. 批量插入时需要注意哪些事项?

批量插入时需要注意以下事项:

  • 准备的数据列表中每个元素必须是实体类实例。
  • 主键字段必须正确设置。
  • 批量插入的数量不宜过大,以免超出数据库的限制。