Java基础三、Dom4j

三、Dom4j
(1)将JDBC配置信息写入到SqlMapConfig.xml

使用Dom4j前需要导入相关依赖

  1. 导入依赖
    <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>
  1. 创建一个输出流,指定创建的SqlMapConfig.xml文件的位置
OutputStream os = new FileOutputStream("./SqlMapConfig.xml");
  1. 创建一个xml编写器
// 创建输出格式
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
// 设置编码
outputFormat.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(os, outputFormat);
  1. 创建xml文档
Document document = DocumentHelper.createDocument();
  1. 创建里面的所有结点元素
// 新建结点元素的形式是:Element 子结点 = 父节点.addElement("子结点名");
// 给结点元素添加属性是:结点.addAttribute("属性名", "属性值");
Element configuration = document.addElement("configuration");
  1. 保存xml
writer.write(document);
  1. 完整代码
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)使用工厂模式创建数据库连接
  1. 使用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 + "'" + "]";
    }
}
  1. 自定义工厂类创建数据库连接对象
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;
    }
}
  1. 测试
public class JDBCTest {
    public static void main(String[] args) {
        DatabaseConfig config = new DatabaseConfig("./SqlMapConfig.xml");
        Connection connection = MyConnectionFactory.createConnection(config);
        System.out.println(connection);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐工_CH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值