mybatis如何执行批量插入?
1 个回答
天越来越黑,星星会越来越亮。武庚### 批量插入的实现 #### 创建简单的 insert 语句 首先,在 MyBatis 的 XML 映射文件中创建一个简单的 insert 语句: ```xml <insert id="insertName"> INSERT INTO names (name) VALUES (#{value}) </insert> ``` #### 在 Java 代码中执行批处理插入 在 Java 代码中,通过 SqlSession 执行批处理插入操作。示例如下: ```java import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import java.util.List; public class BatchInsertExample { private SqlSessionFactory sqlSessionFactory; public BatchInsertExample(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } public void insertNames(List<String> names) { try (SqlSession session = sqlSessionFactory.openSession()) { for (String name : names) { session.insert("insertName", name); } session.commit(); } } } ``` #### 具体步骤 1. **获取 SqlSessionFactory 实例** - 通常通过读取 MyBatis 配置文件获取 `SqlSessionFactory` 实例。 2. **打开 SqlSession** - 通过 `sqlSessionFactory.openSession()` 打开一个 `SqlSession`。 3. **执行插入操作** - 循环遍历需要插入的数据列表,调用 `session.insert("insertName", name)` 插入数据。 - 其中 `"insertName"` 是在 XML 映射文件中定义的 insert 语句的 id,`name` 是要插入的值。 4. **提交事务** - 在循环结束后,调用 `session.commit()` 提交事务,确保所有插入操作生效。 5. **关闭 SqlSession** - 使用 `try-with-resources` 语法确保 `SqlSession` 在操作完成后自动关闭。 ### 完整示例 假设我们有一个 MyBatis 配置文件 `mybatis-config.xml` 和一个映射文件 `name-mapper.xml`。 **mybatis-config.xml**: ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="password"/> </dataSource> </environment> </environments> <mappers> <mapper resource="name-mapper.xml"/> </mappers> </configuration> ``` **name-mapper.xml**: ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="nameMapper"> <insert id="insertName"> INSERT INTO names (name) VALUES (#{value}) </insert> </mapper> ``` **Java 代码**: ```java import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.Reader; import java.util.Arrays; import java.util.List; public class BatchInsertExample { private SqlSessionFactory sqlSessionFactory; public BatchInsertExample() throws Exception { String resource = "mybatis-config.xml"; Reader reader = Resources.getResourceAsReader(resource); this.sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } public void insertNames(List<String> names) { try (SqlSession session = sqlSessionFactory.openSession()) { for (String name : names) { session.insert("nameMapper.insertName", name); } session.commit(); } } public static void main(String[] args) throws Exception { BatchInsertExample example = new BatchInsertExample(); List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); example.insertNames(names); } } ``` 这个示例展示了如何在 MyBatis 中实现批量插入操作,确保了代码的整洁和高效。发布于 2024-07-26 01:44 •IP属地 西藏举报评论收藏
公众号进入网站体验更佳

