怎么运用Java实现把Excel中的数据导入MySQL
发表于:2025-11-18 作者:千家信息网编辑
千家信息网最后更新 2025年11月18日,这篇文章将为大家详细讲解有关怎么运用Java实现把Excel中的数据导入MySQL,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、pom文件
千家信息网最后更新 2025年11月18日怎么运用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安全错误
数据库的锁怎样保障安全
全民云计算云服务器
k3系统老是连接服务器失败
软件开发专业对英语的要求
软件开发人员派遣价钱
剑网3哪个服务器
软件开发属于电子产品吗
mysql数据库和sql
大话2成交率多的服务器
辽阳供热站自动化控制软件开发
许昌软件开发厂家价格
有看头为什么连不上服务器
计算机及网络技术题库
融盛网络技术
ftp服务器不能被访问
公安网络安全监察举报网
服务器连接云服务
广东省网络安全系编制人员
bde数据库引擎下载
linux转发服务器
杰夫格林数据库
数据库安全审计情况
德国mdl数据库
江苏交友软件开发价位
软件开发的所有权归谁
dw指定服务器字体
网络技术员报名
包头伯睿网络技术有限公司
可视化管理软件开发商
网络技术与技术就业方向
粉丝关注数据库