java mybatis批量插入
时间: 2024-05-06 12:14:22 浏览: 136
以下是Java实现Mybatis批量插入数据到Oracle的两种方法:
引用:Java实现mybatis批量插入数据到Oracle[^1]。
1.使用foreach标签批量插入数据。在Mybatis的mapper.xml中,可以使用foreach标签循环插入数据,如下所示:
```xml
<insert id="batchInsert" parameterType="java.util.List">
INSERT INTO user(username, address, remark, age, create_time)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.username}, #{item.address}, #{item.remark}, #{item.age}, sysdate)
</foreach>
</insert>
```
注意,在这个例子中,我们使用了Oracle特有的sysdate方法来插入当前时间。
在Java代码中,使用SqlSession的批量操作方法,即可完成批量插入数据。
```java
List<User> userList = new ArrayList<>();
// 填充userList...
try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.batchInsert(userList);
sqlSession.commit();
} catch (Exception e) {
logger.error("batchInsert error", e);
}
```
2.使用Oracle JDBC的批量插入API。使用该API可以将多条SQL语句作为一个批量发送到Oracle服务器端执行,可以提高插入数据的效率。具体实现如下:
```java
public void batchInsert(List<User> userList) {
String sql = "INSERT INTO user(username, address, remark, age, create_time) VALUES(?,?,?,?,sysdate)";
try (Connection conn = dataSource.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
conn.setAutoCommit(false);
for (User user : userList) {
stmt.setString(1, user.getUsername());
stmt.setString(2, user.getAddress());
stmt.setString(3, user.getRemark());
stmt.setInt(4, user.getAge());
stmt.addBatch();
}
stmt.executeBatch();
conn.commit();
} catch (Exception e) {
logger.error("batchInsert error", e);
}
}
```
注意,在这个例子中,我们使用了Oracle特有的sysdate方法来插入当前时间。另外,需要注意的是,使用该API的时候,需要手动开启事务并关闭自动提交。
阅读全文