怎么运用Java实现把Excel中的数据导入MySQL
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章将为大家详细讲解有关怎么运用Java实现把Excel中的数据导入MySQL,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、pom文件
千家信息网最后更新 2026年11月04日怎么运用Java实现把Excel中的数据导入MySQL
这篇文章将为大家详细讲解有关怎么运用Java实现把Excel中的数据导入MySQL,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一、pom文件
junit junit 4.12 org.springframework.boot spring-boot-starter-test test com.alibaba easyexcel 2.1.7 com.alibaba fastjson 1.2.62 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test com.mchange c3p0 0.9.5.2 com.baomidou mybatis-plus-boot-starter 3.4.0 org.springframework.boot spring-boot-starter-jdbc mysql mysql-connector-java runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-web org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test 二、配置文件
server.port=8080mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImplspring.datasource.url=jdbc:mysql://localhost:3306/ddb_resources?serverTimezone=UTCspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.username=rootspring.datasource.password=root三、mapper文件
@Mapperpublic interface DdbBookNewWordMapper extends BaseMapper{}
四、service文件
@Servicepublic class DemoDAO { @Autowired DdbBookNewWordMapper mapper; public void save(List list) { // 如果是mybatis,尽量别直接调用多次insert,自己写一个mapper里面新增一个方法batchInsert,所有数据一次性插入 DdbBookNewWord newWord = new DdbBookNewWord(); System.out.println("插入数据开始==============================="); for (DataDemo001 info : list) { newWord.setAppType(0); newWord.setFkBookId(info.getFkBookId()); newWord.setWord(info.getWord()); newWord.setSimpleExplain(info.getSimpleExplain()); newWord.setImgUrl("/incoming/ddb/wordImg/"+info.getFkBookId()+"/"+info.getImgUrl()); newWord.setSoundUrl("/incoming/ddb/wordAudio/bookStudyMp3/"+info.getFkBookId()+"/"+info.getSoundUrl()); newWord.setCreateTimeInMs(1620983400709L); newWord.setUpdateTimeInMs(1620983400709L); System.out.println(newWord); mapper.insert(newWord); } System.out.println("结束========================="); }} 五、实体类(数据库对应)
@Data@AllArgsConstructor@NoArgsConstructor@ToStringpublic class DdbBookNewWord { private int id; private String fkBookId; private String word; private String simpleExplain; private String imgUrl; private long createTimeInMs; private long updateTimeInMs; private int appType; private String soundUrl;}六、excel对应的实体类
@Datapublic class DataDemo001 { private String fkBookId; private String bookeName; private String moudle; private String unit; private String word; private String soundUrl; private String imgUrl; private String simpleExplain;}七、监听器
// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去public class DataDemo001Listener extends AnalysisEventListener {// DemoDAO demoDAO = SpringContextHolder.getBean(DemoDAO.class); private static final Logger LOGGER = LoggerFactory.getLogger(DataDemo001Listener.class); /** * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 */ private static final int BATCH_COUNT = 100; List list = new ArrayList(); /** * 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。 */ private DemoDAO demoDAO;// public DataDemo001Listener(DemoDAO demoDAO) { // 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数 this.demoDAO = demoDAO; } /** * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来 * * @param demoDAO */// public DataDemo001Listener(DemoDAO demoDAO) {// this.demoDAO = demoDAO;// } /** * 这个每一条数据解析都会来调用 * * @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()} * @param context */ @Override public void invoke(DataDemo001 data, AnalysisContext context) { System.out.println(JSON.toJSONString(data)); list.add(data); // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM if (list.size() >= BATCH_COUNT) { saveData(); // 存储完成清理 list list.clear(); } } /** * 所有数据解析完成了 都会来调用 * * @param context */ @Override public void doAfterAllAnalysed(AnalysisContext context) { // 这里也要保存数据,确保最后遗留的数据也存储到数据库 saveData(); LOGGER.info("所有数据解析完成!"); } /** * 加上存储数据库 */ private void saveData() { demoDAO.save(list); }} 八、测试类
String path = "D:\java-demo\kuang-poi\"; @Test public void simpleRead() { String fileName = path+"悠游阅读成长计划-单词部分.xls"; // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭 EasyExcel.read(fileName, DataDemo001.class, new DataDemo001Listener(demoDAO)).sheet().doRead(); }九、启动类(没啥用)
@MapperScan("com.example.demo.mapper")@ComponentScan({"com.example.demo.test","com.example.demo.service"})@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}关于"怎么运用Java实现把Excel中的数据导入MySQL"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
数据
存储
数据库
文件
方法
篇文章
内存
实体
实际
更多
管理
不错
实用
重要
一次性
不用
业务
内容
函数
单词
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
花魁咖啡
广州为想互联网科技有限公司
中关村互联网 科技集团
互联网科技卖菜
北京互联网科技公司
齐家互联网科技
有木互联网科技
互联网科技logo
互联网科技大会案例
哈尔滨新华互联网科技
深圳互联网科技怎么样
互联网 科技馆
互联网汽车科技小镇
互联网教育科技公司vipkid
互联网科技创新服务
深圳市优智互联网科技有限公司
中国互联网十大科技股排名
互联网新科技动漫ppt素材
互联网科技博主张洲
中国主要互联网科技公司
手磨咖啡
深圳科技互联网
深圳互联网科技公司
深圳齐家互联网科技
恒生科技互联网指数分析
互联网科技革命什么开始
互联网金融科技公司的优势
上海钢联属于互联网科技股吗
广州百诚互联网科技有限公司官网
玉溪新华互联网科技怎么选