mybatis如何批量插入
时间: 2023-10-13 21:05:00 浏览: 93
MyBatis 提供了批量插入的支持,可以通过 `insertList` 或 `insertBatch` 方法实现。具体步骤如下:
1. 在 Mapper 接口中定义批量插入的方法,并使用 `@Insert` 注解。
```java
@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
void insertBatch(List<User> userList);
```
2. 在 MyBatis 配置文件中开启 JDBC 批处理功能。
```xml
<configuration>
<settings>
<setting name="jdbcTypeForNull" value="NULL" />
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="false" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<setting name="useGeneratedKeys" value="false" />
<setting name="autoMappingBehavior" value="PARTIAL" />
<setting name="autoMappingUnknownColumnBehavior" value="WARNING" />
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="defaultStatementTimeout" value="25" />
<setting name="defaultFetchSize" value="100" />
<setting name="safeRowBoundsEnabled" value="false" />
<setting name="mapUnderscoreToCamelCase" value="false" />
<setting name="localCacheScope" value="SESSION" />
<setting name="jdbcTypeForNull" value="OTHER" />
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
<setting name="defaultScriptingLanguage" value="org.apache.ibatis.scripting.xmltags.XMLLanguageDriver" />
<setting name="callSettersOnNulls" value="false" />
<setting name="logImpl" value="LOG4J" />
<setting name="configurationFactory" value="org.apache.ibatis.session.Configuration$DefaultConfigurationFactory" />
<setting name="defaultSqlSessionFactory" value="org.apache.ibatis.session.defaults.DefaultSqlSessionFactory" />
<setting name="defaultSqlSessionTemplate" value="org.apache.ibatis.session.defaults.DefaultSqlSessionTemplate" />
<setting name="defaultSqlSession" value="org.apache.ibatis.session.defaults.DefaultSqlSession" />
<!-- 开启 JDBC 批处理功能 -->
<setting name="defaultExecutorType" value="BATCH"/>
</settings>
</configuration>
```
3. 调用 Mapper 接口的批量插入方法即可实现批量插入。
```java
List<User> userList = new ArrayList<>();
// ... 构造用户列表
userMapper.insertBatch(userList);
```
注意事项:
- 批量插入使用 JDBC 批处理功能,在执行插入操作时,会将多个插入语句一次性发送到数据库执行,因此可以有效减少网络传输和数据库交互的次数,提升插入效率。
- 批量插入需要注意内存占用问题,如果一次插入的数据量过大,可能会导致内存溢出等问题,因此建议在插入时控制每次插入的数据量,或者使用分批插入的方式。
- 插入操作需要保证数据的正确性和完整性,如果数据存在重复或者插入失败等情况,需要有相应的处理机制。
阅读全文