基于Java SSM实现Excel数据批量导入

 更新时间:2021年11月23日 16:20:49   作者:梁云亮  
这篇文章主要为大家详细介绍了基于Java SSM如何实现excel数据批量导入,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

导入Maven依赖

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>easyexcel</artifactId>
	<version>${easyexcel.version}</version>
</dependency>

Mapper及映射文件

UserMapper.java

@Mapper
public interface UserMapper {
    int batchInsert(@Param("list") List<User> list);
}

UserMapper.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="com.hc.mapper.UserMapper">
  <resultMap id="BaseResultMap" type="com.hc.domain.User">
    <!--@mbg.generated-->
    <!--@Table tb_user-->
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="nickname" jdbcType="VARCHAR" property="nickname" />
    <result column="avatar" jdbcType="VARCHAR" property="avatar" />
    <result column="account" jdbcType="VARCHAR" property="account" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="gender" jdbcType="TINYINT" property="gender" />
    <result column="tel" jdbcType="VARCHAR" property="tel" />
    <result column="email" jdbcType="VARCHAR" property="email" />
    <result column="qq" jdbcType="VARCHAR" property="qq" />
    <result column="wechat" jdbcType="VARCHAR" property="wechat" />
    <result column="salt" jdbcType="VARCHAR" property="salt" />
    <result column="info" jdbcType="VARCHAR" property="info" />
    <result column="status" jdbcType="TINYINT" property="status" />
    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--@mbg.generated-->
    id, nickname, avatar, account, `password`, gender, tel, email, qq, wechat, salt, 
    info, `status`, create_time, update_time
  </sql>
  <insert id="batchInsert" keyColumn="id" keyProperty="id" parameterType="map" useGeneratedKeys="true">
    <!--@mbg.generated-->
    insert into tb_user
    (nickname, avatar, account, `password`, gender, tel, email, qq, wechat, salt, info,
    `status`, create_time, update_time)
    values
    <foreach collection="list" item="item" separator=",">
      (#{item.nickname,jdbcType=VARCHAR}, #{item.avatar,jdbcType=VARCHAR}, #{item.account,jdbcType=VARCHAR},
      #{item.password,jdbcType=VARCHAR}, #{item.gender,jdbcType=TINYINT}, #{item.tel,jdbcType=VARCHAR},
      #{item.email,jdbcType=VARCHAR}, #{item.qq,jdbcType=VARCHAR}, #{item.wechat,jdbcType=VARCHAR},
      #{item.salt,jdbcType=VARCHAR}, #{item.info,jdbcType=VARCHAR}, #{item.status,jdbcType=TINYINT},
      #{item.createTime,jdbcType=TIMESTAMP}, #{item.updateTime,jdbcType=TIMESTAMP})
    </foreach>
  </insert>
</mapper>

Excel监听器

@Log4j2
@Service
public class UserExcelListener extends AnalysisEventListener<User> {

	@Resource
	private UserMapper userMapper;

	/**
	 * 批处理阈值
	 */
	private static final int BATCH_COUNT = 250;
	@Getter
	List<User> list = new ArrayList<>(BATCH_COUNT);

	@Override
	public void invoke(User user, AnalysisContext analysisContext) { //逐行读取数据
		log.info("********** 解析到一条数据:{}", JSON.toJSONString(user));
		list.add(user);
		if (list.size() >= BATCH_COUNT) {
            System.out.println("已经解析"+list.size()+"条数据");
			//每250条,往数据库中存一次
			int batchInsertRes = userMapper.batchInsert(list);
			System.out.println(batchInsertRes);
			list.clear();
		}
	}

	@Override
	public void doAfterAllAnalysed(AnalysisContext analysisContext) {
		log.info("**********所有数据解析完成!");
	}
}

测试

@ExtendWith(SpringExtension.class)
@ContextConfiguration("/applicationContext.xml")
public class ExcelUtilTest {
    @Resource
    private UserExcelListener userExcelListener;

    @Test
    void userListener(){
        EasyExcel.read("E:\\Projects\\WorksDisplay\\data\\users.xlsx", User.class, userExcelListener)
                .sheet()
                .doRead();
    }
} 

到此这篇关于基于Java SSM实现Excel数据批量导入的文章就介绍到这了,更多相关Java  Excel数据批量导入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析SpringBoot中常见的底层注解

    浅析SpringBoot中常见的底层注解

    Spring Boot 是一个用于创建独立的、基于Spring框架的Java应用程序的框架,它提供了许多注解,下面小编就来和大家介绍一些常见的底层注解吧
    2023-08-08
  • SpringBoot 集成 Druid过程解析

    SpringBoot 集成 Druid过程解析

    这篇文章主要介绍了SpringBoot 集成 Druid过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • java异常中throw和throws的区别及说明

    java异常中throw和throws的区别及说明

    这篇文章主要介绍了java异常中throw和throws的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Netty4之如何实现HTTP请求、响应

    Netty4之如何实现HTTP请求、响应

    这篇文章主要介绍了Netty4之如何实现HTTP请求、响应问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • springboot yml定义属性,下文中${} 引用说明

    springboot yml定义属性,下文中${} 引用说明

    这篇文章主要介绍了springboot yml定义属性,下文中${} 引用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 浅谈Java多线程编程中Boolean常量的同步问题

    浅谈Java多线程编程中Boolean常量的同步问题

    这篇文章主要介绍了浅谈Java多线程编程中Boolean常量的同步问题,主要针对线程之间同步了不同的布尔对象的问题,需要的朋友可以参考下
    2015-10-10
  • Java代码实践12306售票算法(二)

    Java代码实践12306售票算法(二)

    这篇文章主要介绍了Java代码实践12306售票算法(二)的相关资料,需要的朋友可以参考下
    2016-02-02
  • Java利用正则取标签之间的数据

    Java利用正则取标签之间的数据

    这篇文章主要介绍了Java利用正则取标签之间的数据,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 看动画学算法之Java实现doublyLinkedList

    看动画学算法之Java实现doublyLinkedList

    这篇文章主要介绍Java实现doublyLinkedList,LinkedList:doublyLinkedList相对比较复杂,今天就来简单学习一下doublyLinkedList的基本操作和概,感兴趣的小伙伴可以参考下面具体文章内容
    2021-10-10
  • Java NIO缓冲区Buffer基础教程示例

    Java NIO缓冲区Buffer基础教程示例

    这篇文章主要介绍了Java NIO缓冲区Buffer基础教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10

最新评论