mybatis中的这三种批量添加1、逐个insert操作:适用于少量数据插入,每次使用都要调用数据库连接,频繁使用会浪费资源,效率低2、foreach标签:使用foreach可以减少数据库连接的调用,效率比insert高3、batch模式:当数据特别多时效率比foreach标签高.具体怎么实现
在 MyBatis 中,实现三种批量添加的方式如下:
-
逐个插入操作:使用单条 SQL 语句插入每一条数据。可以在 Mapper 接口中定义一个插入方法,接受单条数据作为参数。在 Java 代码中循环调用该方法即可实现逐个插入操作。
-
foreach 标签:使用 foreach 标签遍历集合,动态生成多条 SQL 语句,一次性插入多条数据。使用 foreach 标签需要在 Mapper 接口中定义一个插入方法,接受 List 类型的参数。在 Java 代码中将数据封装成 List,传入该方法即可实现批量插入操作。
例如:
<insert id="batchInsert" parameterType="java.util.List"> insert into user (name, age) values <foreach collection="list" item="item" separator=","> (#{item.name}, #{item.age}) </foreach> </insert>
- batch 模式:使用 JDBC 提供的 Batch API 实现批量插入操作。 在 Mapper 接口中定义一个插入方法,接受 List 类型的参数。在 Java 代码中通过创建 PreparedStatement 对象并添加多个参数,最后一次性执行所有的 SQL 语句,从而实现批量插入操作。
例如:
public void batchInsert(List<User> userList) { try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) { UserMapper mapper = sqlSession.getMapper(UserMapper.class); for (User user : userList) { mapper.insert(user); } sqlSession.flushStatements(); sqlSession.commit(); } catch (Exception e) { // 异常处理 } }
总的来说,使用 MyBatis 实现批量插入操作的方式有多种,具体方法应根据实际需求和数据量大小选择。
4, MybatisPlus 提供了 insertBatchSomeColum方法批量插入,但是会拼接出非常长的SQL 语句@Transactional(rollbackFor = {Exception.class)).
5.使用 jdbc的批处理提交,但是编程繁琐。这两种批量添加具体怎么实现
- MybatisPlus 提供了 insertBatchSomeColumn 方法批量插入,但是会拼接出非常长的 SQL 语句
MybatisPlus 的 insertBatchSomeColumn 方法是在 Mybatis 原生的 foreach 标签上进行封装的。它可以通过传入一个实体列表,批量插入表中的数据。insertBatchSomeColumn 方法还提供了一个参数,可以指定需要插入的列名,从而避免插入表中的所有字段。但是当插入数据非常多时,会拼接出非常长的 SQL 语句,导致效率低下。
例如:
复制代码
List<User> userList = new ArrayList<>(); // 添加用户数据到 userList 中 userMapper.insertBatchSomeColumn(userList, "name", "age");
- 使用 JDBC 的批处理提交
使用 JDBC 提供的批处理提交可以大大提高插入数据的效率。JDBC 的批处理提交可以将多个 SQL 语句打包在一起,一次性发送给数据库执行。在 Java 代码中只需要编写一个插入 SQL 语句,然后通过 PreparedStatement 对象设置参数,最后使用 executeBatch() 方法一次性执行所有 SQL 语句即可。
例如:
总的来说,MybatisPlus 的 insertBatchSomeColumn 方法适用于插入数据较少的情况,而使用 JDBC 提供的批处理提交可以提高插入数据的效率,适用于插入数据较多的情况。