以下是MyBatis批量添加数据2种实现方法的完整攻略。
1. 方式一:foreach元素进行插入
在MyBatis中,我们可以使用foreach
元素实现批量插入。具体步骤如下:
- 在MyBatis的Mapper配置文件中,编写插入语句,并使用
foreach
元素将多个数据插入到表中。示例代码如下:
<insert id="batchInsert">
INSERT INTO user(name, age, gender)
VALUES
<foreach collection="users" item="user" separator=",">
(#{user.name}, #{user.age}, #{user.gender})
</foreach>
</insert>
- 在Java代码中,将要插入的数据封装成一个List对象,然后通过MyBatis的
SqlSession
对象调用batchInsert
方法,即可实现批量插入。示例代码如下:
public void batchInsert(List<User> userList) {
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.batchInsert(userList);
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
throw new RuntimeException("批量插入失败:" + e.getMessage());
} finally {
sqlSession.close();
}
}
2. 方式二:使用JDBC批量插入
除了使用foreach
元素,我们还可以利用JDBC的addBatch
和executeBatch
方法进行批量插入。具体步骤如下:
- 在MyBatis的Mapper配置文件中,编写插入语句,但是将VALUES语句中的占位符修改为问号,示例代码如下:
<insert id="insert">
INSERT INTO user(name, age, gender)
VALUES(?, ?, ?)
</insert>
- 在Java代码中,获取JDBC连接,并且调用
prepareStatement
方法创建PreparedStatement对象:
Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement ps = conn.prepareStatement("insert into user(name, age, gender) values (?, ?, ?)");
- 获取待插入的数据集合,遍历集合,将每个对象的属性设置给PreparedStatement对象,并且调用
addBatch
方法,示例代码如下:
for (User user : userList) {
ps.setString(1, user.getName());
ps.setInt(2, user.getAge());
ps.setString(3, user.getGender());
ps.addBatch();
}
- 最后调用
executeBatch
方法即可实现批量插入操作。
ps.executeBatch();
完整示例代码请参考以下:
<!-- Mybatis的Mapper文件-->
<insert id="batchInsert">
INSERT INTO user(name, age, gender)
VALUES
<foreach collection="users" item="user" separator=",">
(#{user.name}, #{user.age}, #{user.gender})
</foreach>
</insert>
<insert id="insert">
INSERT INTO user(name, age, gender)
VALUES(?, ?, ?)
</insert>
// Java代码
public void batchInsert(List<User> userList) {
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.batchInsert(userList);
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
throw new RuntimeException("批量插入失败:" + e.getMessage());
} finally {
sqlSession.close();
}
}
public void batchInsertWithJdbc(List<User> userList) {
Connection conn = DriverManager.getConnection(url, username, password);
try {
PreparedStatement ps = conn.prepareStatement("insert into user(name, age, gender) values (?, ?, ?)");
for (User user : userList) {
ps.setString(1, user.getName());
ps.setInt(2, user.getAge());
ps.setString(3, user.getGender());
ps.addBatch();
}
ps.executeBatch();
conn.commit();
} catch (Exception e) {
conn.rollback();
throw new RuntimeException("批量插入失败:" + e.getMessage());
} finally {
conn.close();
}
}
// 示例数据
List<User> userList = new ArrayList<>();
userList.add(new User("Tom", 18, "male"));
userList.add(new User("Linda", 20, "female"));
batchInsert(userList);
batchInsertWithJdbc(userList);
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis批量添加数据2种实现方法 - Python技术站