package com.xmltomysql.service;
import com.xmltomysql.mapper.XMLtoMySQLMapper;
import com.xmltomysql.po.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.util.List;
/**
* @version 1.0
*/
@Service
public class XMLtoMySQLService {
@Autowired
XMLtoMySQLMapper xmLtoMySQLMapper;
//读取xml文件并添加到mysql
@Test
public Boolean readXML(){
//List<Person> persons = new ArrayList<>();
//文件存放路径
String filePath = "D:\\idea\\information.XML";
try {
// 创建DocumentBuilder对象--解析工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 将XML文件加载到Document对象中
Document document = builder.parse(filePath);
// 获取根元素
Element root = document.getDocumentElement();
// 获取'person'元素的列表
NodeList personList = root.getElementsByTagName("person");
// 遍历'person'元素并提取数据
for (int i = 0; i < personList.getLength(); i++) {
Node personNode = personList.item(i);
//判断当前的 personNode是否为一个节点
if (personNode.getNodeType() == Node.ELEMENT_NODE) {
//将personNode节点强制转换为Element类,使用其类中方法,personElement对象来访问该元素节点的名称、属性、子节点等
Element personElement = (Element) personNode;
Person person = new Person();
// 获取'name'元素
//getElementsByTagName()返回的是一个集合,.item(0)表示返回第一个元素
Element nameElement = (Element) personElement.getElementsByTagName("name").item(0);
String name = nameElement.getTextContent(); //获取nameElement元素节点的文本内容
person.setName(name);
// 获取'gender'元素
Element genderElement = (Element) personElement.getElementsByTagName("gender").item(0);
String gender = genderElement.getTextContent();
person.setGender( Integer.parseInt(gender) ); //Integer.parseInt()将string转换为Integer
// 获取'address'元素
Element addressElement = (Element) personElement.getElementsByTagName("address").item(0);
String address = addressElement.getTextContent();
person.setAddress(address);
// 获取'phoneNumber'元素
Element phoneNumberElement = (Element) personElement.getElementsByTagName("phoneNumber").item(0);
String phoneNumber = phoneNumberElement.getTextContent();
person.setPhoneNumber(phoneNumber);
//给集合添加内容
//persons.add(person);
System.out.println(person);
xmLtoMySQLMapper.insert(person);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
//查询mysql
public List<Person> select(){
return xmLtoMySQLMapper.select();
}
}
Java读取XML文件内容存储到MySQL
需积分: 0 144 浏览量
更新于2023-06-30
收藏 78KB ZIP 举报
在Java开发中,将XML文件的内容读取并存储到MySQL数据库是常见的操作,尤其是在数据迁移、数据处理或系统集成的场景。本篇将详细介绍如何利用Java技术栈,结合MyBatis和SpringBoot框架来实现这一功能。
我们需要了解XML文件的结构。XML(eXtensible Markup Language)是一种用于标记数据的语言,它以树形结构组织数据,便于程序读取和解析。在Java中,我们可以使用DOM、SAX或StaX等API来解析XML文件。这里以常用的DOM解析为例,使用`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`进行解析。
```java
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import java.io.File;
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("path_to_xml_file"));
```
接下来,我们引入SpringBoot和MyBatis。SpringBoot简化了Spring的配置,而MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在SpringBoot中配置MyBatis,我们需要在`application.yml`中添加数据库连接信息,并创建MyBatis的配置文件`mybatis-config.xml`。
然后,我们需要为XML文件中的每个数据元素创建对应的Java实体类,例如`User`,并编写对应的Mapper接口和Mapper XML文件,用于定义SQL语句。例如:
```java
// User.java
public class User {
private String id;
private String name;
// getters and setters
}
// UserMapper.java
public interface UserMapper {
@Insert("INSERT INTO users(id, name) VALUES(#{id}, #{name})")
void insertUser(User user);
}
```
接着,创建一个Service类,使用Spring的`@Autowired`注解注入UserMapper,然后编写读取XML和插入数据库的方法。在这个方法中,遍历XML文档的节点,根据节点内容创建User对象,并调用Mapper的`insertUser`方法将其存入MySQL。
```java
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void parseAndSaveXML(String xmlFilePath) {
// 解析XML文件,获取根节点
// 遍历节点,创建User对象并调用userMapper.insertUser()
}
}
```
在SpringBoot的主类中,使用`@PostConstruct`注解标记的方法会在应用启动后自动执行,可以在这里调用`parseAndSaveXML`方法。
```java
@SpringBootApplication
public class Application {
@Autowired
private UserService userService;
@PostConstruct
public void init() {
userService.parseAndSaveXML("path_to_xml_file");
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
以上就是使用Java、MyBatis和SpringBoot将XML文件内容存储到MySQL的基本流程。实际项目中可能还需要考虑异常处理、日志记录、性能优化等因素。此外,如果XML文件非常大,考虑到内存消耗和性能,可以考虑使用SAX或StaX进行流式解析,或者分批处理数据。在处理大量数据时,还可以利用SpringBatch进行批量导入,提高效率。
liuliu0616
- 粉丝: 10
- 资源: 1
最新资源
- 西工大noj 116题及答案word版.doc
- 模拟采访ppt封面(英文版)
- Django开发中常见问题与解决方案的全面指南
- 基于51单片机的波形发生器设计(protues仿真)-毕业设计
- 安卓开发注意事项及踩坑示例:从环境搭建到性能优化全面指南
- 车辆船只检测5-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- Questasim仿真脚本
- Questasim仿真脚本2
- 基于51单片机的正弦波方波锯齿波振幅频率可调波形发生器设计(protues仿真)-毕业设计
- 西工大noj 题及答案word版.docx
- 计算机视觉与机器学习的OpenCV开发资源指南
- YOLO目标检测算法学习与开发资源全面整理
- 基于51单片机的定时插座数码管设计(protues仿真)-毕业设计
- 车辆船只检测8-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- mp3转换器小程序-音频20241222115740.mp3
- 汇编语言学习开发资源指南:计算机科学基础与实践