ibatis批量导入mysql数据库

介绍了一种高效的方法来批量导入大量Excel数据到MySQL数据库中,通过使用批处理技术和事务管理,将传统导入方式的时间从3分钟减少到了3秒。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作中需要批量导入excel数据到mysql数据库中

excel数据量比较大,一次大概导入1万多条

用传统的for循环导入mysql数据库的话,非常耗时,大概3分钟左右

所有就需要用到批处理,核心算法如下

 /**
		* 批量插入功能
		*/
	   @SuppressWarnings("unchecked")
	   public void insertBatch(final List<WinddataBo> list) {
		   SqlMapClient sqlMapClientTemplate = baseDao.getSqlMapClient();
		   try {
			   sqlMapClientTemplate.startTransaction();//开启事务
			   /**事务todo start***/
			   /**先执行删除所有**/
			   sqlMapClientTemplate.delete("com.zero2ipo.ylcf.winddata.deleteAll");
			   sqlMapClientTemplate.insert("com.zero2ipo.ylcf.winddata.insertBatch",list);
			   /**事务todo end***/
			   sqlMapClientTemplate.commitTransaction();//提交事务
		   } catch (SQLException e) {
			   e.printStackTrace();
		   }finally {
			   try {
				   sqlMapClientTemplate.endTransaction();//事务完成
			   } catch (SQLException e) {
				   try {
					   sqlMapClientTemplate.getCurrentConnection().rollback();	//事务回滚
				   } catch (SQLException e1) {
					   e1.printStackTrace();
				   }
				   e.printStackTrace();
			   }
		   }

	   }

   ibatis sql文件如下

<!--批量插入-->
<insert  id ="com.zero2ipo.ylcf.winddata.insertBatch"  parameterClass ="java.util.List">
   <![CDATA[
        insert into winddata(CRETE_DATE , SHOUPANJIA , COLUMN1,COLUMN2 ) values
    ]]>
	<iterate  conjunction ="," >
	<![CDATA[
            (#list[].creteDate#,#list[].shoupanjia#,#list[].column1#,#list[].column2#)
        ]]>
	</iterate >
</insert >

 

   

   1次导入excel1万多条数据,耗时大概3秒钟

 

   部分效果图



 

 

 

 

### Java 实现 Excel 批量导入用户信息 为了实现通过Java批量导入Excel中的用户信息到数据库,可以采用Apache POI库来解析Excel文件并读取其中的数据。下面是一个完整的示例代码展示如何完成这一过程。 #### 1. 添加依赖项 首先,在项目的`pom.xml`中加入必要的Maven依赖: ```xml <dependencies> <!-- Apache POI --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> <!-- MyBatis Core --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <!-- MySQL Connector --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies> ``` #### 2. 创建实体类 `User.java` 定义用于存储用户的模型对象: ```java package com.example.demo.model; public class User { private String id; private String name; private int age; // Getters and Setters... } ``` #### 3. 编写Mapper接口 `UserMapper.java` 创建MyBatis Mapper接口来进行批量插入操作: ```java package com.example.demo.mapper; import org.apache.ibatis.annotations.Param; import java.util.List; public interface UserMapper { /** * 插入多条记录 */ void insertUsers(@Param("users") List<User> users); } ``` #### 4. 处理上传的Excel文件 `UserService.java` 编写服务层逻辑处理上传的Excel文件,并调用Mapper执行批量保存: ```java package com.example.demo.service.impl; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; public void batchImport(MultipartFile file) throws IOException { InputStream inputStream = null; try { inputStream = file.getInputStream(); Workbook workbook = new XSSFWorkbook(inputStream); Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表 Iterator<Row> iterator = sheet.iterator(); while (iterator.hasNext()) { Row nextRow = iterator.next(); if(nextRow.getRowNum() == 0){ continue; // 跳过标题行 } Cell cellName = nextRow.getCell(0); Cell cellAge = nextRow.getCell(1); Users user = new Users(); user.setName(cellName.getStringCellValue()); user.setAge((int)cellAge.getNumericCellValue()); userList.add(user); } userMapper.insertUsers(userList); } finally { if (inputStream != null) { inputStream.close(); } } } } ``` 此段代码展示了如何利用POI API遍历每一行数据[^1],并将每行的内容映射成相应的业务对象实例后存放到列表中;之后再一次性提交给持久化层进行批量入库操作[^2]。对于单元格内具体字段类型的获取,则参照了具体的API方法如`getStringCellValue()`或`getNumericCellValue()`等函数[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值