三、Dom4j
(1)将JDBC配置信息写入到SqlMapConfig.xml
使用Dom4j前需要导入相关依赖
- 导入依赖
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
- 创建一个输出流,指定创建的SqlMapConfig.xml文件的位置
OutputStream os = new FileOutputStream("./SqlMapConfig.xml");
- 创建一个xml编写器
// 创建输出格式
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
// 设置编码
outputFormat.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(os, outputFormat);
- 创建xml文档
Document document = DocumentHelper.createDocument();
- 创建里面的所有结点元素
// 新建结点元素的形式是:Element 子结点 = 父节点.addElement("子结点名");
// 给结点元素添加属性是:结点.addAttribute("属性名", "属性值");
Element configuration = document.addElement("configuration");
- 保存xml
writer.write(document);
- 完整代码
public class CreateXML {
public static void main(String[] args) throws IOException {
//创建一个输出流,指定创建的xml文件的位置
OutputStream os = new FileOutputStream("./SqlMapConfig.xml");
// 创建输出格式
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
// 设置编码
outputFormat.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(os, outputFormat);
//创建Document
Document document = DocumentHelper.createDocument();
Element configuration = document.addElement("configuration");
Element environments = configuration.addElement("environments");
environments.addAttribute("default", "development");
Element environment = environments.addElement("environment");
environment.addAttribute("id", "MySQL");
Element transactionManager = environment.addElement("transactionManager");
transactionManager.addAttribute("type", "JDBC");
transactionManager.setText("123");
Element dataSource = environment.addElement("dataSource");
dataSource.addAttribute("type", "POOLED");
Element driver = dataSource.addElement("property");
driver.addAttribute("name", "driver");
driver.addAttribute("value", "com.mysql.jdbc.Driver");
Element url = dataSource.addElement("property");
url.addAttribute("name", "url");
url.addAttribute("value", "jdbc:mysql://127.0.0.1:3306/test_db");
Element username = dataSource.addElement("property");
username.addAttribute("name", "username");
username.addAttribute("value", "root");
Element password = dataSource.addElement("property");
password.addAttribute("name", "password");
password.addAttribute("value", "123456");
Element mappers = configuration.addElement("mappers");
Element mapper1 = mappers.addElement("mapper");
mapper1.addAttribute("resource", "com/pojo/sql/DepMap.xml");
Element mapper2 = mappers.addElement("mapper");
mapper2.addAttribute("resource", "com/pojo/sql/EmpMap.xml");
//保存xml
writer.write(document);
writer.close();
}
}
(2)使用工厂模式创建数据库连接
- 使用Dom4j读取数据库配置信息
public class DatabaseConfig {
private String driver;
private String url;
private String username;
private String password;
private static final String PROPERTY_NODE_NAME = "/configuration/environments/environment/dataSource/property";
public DatabaseConfig(String filePath) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(filePath);
Element driverElement = (Element)document.selectSingleNode(getPropertyNodeName("driver"));
Element urlElement = (Element)document.selectSingleNode(getPropertyNodeName("url"));
Element usernameElement = (Element)document.selectSingleNode(getPropertyNodeName("username"));
Element passwordElement = (Element)document.selectSingleNode(getPropertyNodeName("password"));
this.driver = driverElement.attributeValue("value");
this.url = urlElement.attributeValue("value");
this.username = usernameElement.attributeValue("value");
this.password = passwordElement.attributeValue("value");
} catch (DocumentException e) {
e.printStackTrace();
}
}
public String getDriver() {
return driver;
}
public String getUrl() {
return url;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
/**
* 通过节点名称获取节点
* @param name 需要获取节点的节点名称
* @return 拼接后的节点
*/
private static String getPropertyNodeName(String name) {
return PROPERTY_NODE_NAME + "[@name=" + "'" + name + "'" + "]";
}
}
- 自定义工厂类创建数据库连接对象
public class MyConnectionFactory {
public static Connection createConnection(DatabaseConfig config) {
Connection connection = null;
try {
Class.forName(config.getDriver());
connection = DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword());
} catch (ClassNotFoundException classNotFoundException) {
classNotFoundException.printStackTrace();
} catch (SQLException sqlException) {
sqlException.printStackTrace();
}
return connection;
}
}
- 测试
public class JDBCTest {
public static void main(String[] args) {
DatabaseConfig config = new DatabaseConfig("./SqlMapConfig.xml");
Connection connection = MyConnectionFactory.createConnection(config);
System.out.println(connection);
}
}