怎么运用Java实现把Excel中的数据导入MySQL
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章将为大家详细讲解有关怎么运用Java实现把Excel中的数据导入MySQL,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、pom文件
千家信息网最后更新 2025年02月07日怎么运用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安全错误
数据库的锁怎样保障安全
用模拟器 软件开发
有关网络安全保护法的作文
乐山服务器云存储经销商
服务器主板报警硬盘灯没亮
河北电信服务器登录不上
南沙高效网络数据库维护
宋慧芬网络安全
福建盈科云商网络技术有限公司
计算机网络安全的案例分析
东城区技术软件开发创新服务
梦幻新诛仙获取服务器列表失败
张曼玉唱歌软件开发
常用的文件检索数据库有
华脉科技软件开发招聘
ccs软件开发环境特点
网易软件开发配电脑吗
无法验证服务器身份是病毒吗
扬州市公安局网络安全
上海宁丞互联网科技有限公司
广东深圳海迅网络技术有限公司
河南中原银行网络安全
中国科技引文与论文数据库
美国资产管理2015数据库
听说网络安全很难学
运营软件开发优势
j软件开发工程师笔试
win平板电脑软件开发
管理数据库的web应用
广电直播转码服务器
场景大师网络技术