【菜鸟学Java】9:使用dom4j解析jdbc.xml

        最开始的时候,程序中需要操作数据库了,我们会把连接数据库的JDBC代码写到我们的业务逻辑代码里面,这样,每连接一次,就要写一遍JDBC连接-关闭的代码,这样的写法显然是很糟糕的,一旦数据库有所变更,那么你将要修改你的程序中所有使用JDBC的程序块,一个一个的改固然让人抓狂,批量替换也不是什么好办法。

        因此我们就开始了抽象和封装,将连接数据库的代码抽取出来,写成一个工具类,专门负责维护JDBC的连接信息,然后在我们要连接数据库的地方引用这个JDBC工具类,即可完成数据库的连接,进而操作数据库的表和数据。那么问题又来了,如果要更换数据库,那么依然要修改JDBC工具类,并且重新编译,才可以完成数据库的切换,这个也不是很高明的办法。

        最后我们想出了使用XML配置文件,来维护JDBC的连接信息,这样只要在JDBC工具类里面读取配置文件的内容即可。而配置文件是支持热部署的,就是可以在不动任何程序代码的情况下,更换和修改数据库的连接信息,这样做是不是更爽呢?那么问题又来了,怎么读取配置文件呢?请接着往下看。

        想要解析XML,大致有四种方式:DOM、JDOM、SAX以及我们马上要使用的DOM4J。

关于他们的介绍和比较,在本文就不再详细说明了,大家可以自己找资料进行学习。下面我就来代码实战,说说怎么使用dom4j解析xml。

        首先要准备一个jdbc的配置文件jdbc.xml,如下所示:

<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<config>
	<db-info>
		<driver-name>oracle.jdbc.driver.OracleDriver</driver-name>
		<url>jdbc:oracle:thin:@localhost:1521:Databasename</url>
		<user-name>username</user-name>
		<password>password</password>
	</db-info>
</config></span>

        然后再准备一个实体类JdbcConfig.java,用于方便的操作解析出来的jdbc配置信息,如下:

public class JdbcConfig {

	private String driverName;
	
	private String url;
	
	private String userName;
	
	private String password;

	public String getDriverName() {
		return driverName;
	}

	public void setDriverName(String driverName) {
		this.driverName = driverName;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	@Override
	public String toString() {
		return this.getClass().getName() + "{driverName:" + driverName + ", url:" + url + ", userName:" + userName + "}";
	}
	
}

        之后就要写XML的解析器了,在使用dom4j之前当然要先引入jar包了,如下图所示,jar包自己可以去网上下载:

【菜鸟学Java】9:使用dom4j解析jdbc.xml_第1张图片

        解析器XmlConfigReader.java的代码如下;

/**
 * 采用单例模式解析xml文件 
 * @author ljw
 *
 */
public class XmlConfigReader {
	
	//懒汉式(延迟加载lazy)
	private static XmlConfigReader instance = null;
	
	//保存jdbc相关配置信息
	private JdbcConfig jdbcConfig = new JdbcConfig();
	
	private XmlConfigReader() {
		SAXReader reader = new SAXReader();
		InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.xml");
		try {
			Document doc = reader.read(in);
			
			//取得jdbc相关配置信息
			Element driverNameElt = (Element)doc.selectObject("/config/db-info/driver-name");
			Element urlElt = (Element)doc.selectObject("/config/db-info/url");
			Element userNameElt = (Element)doc.selectObject("/config/db-info/user-name");
			Element passwordElt = (Element)doc.selectObject("/config/db-info/password");
			
			//设置jdbc相关的配置
			jdbcConfig.setDriverName(driverNameElt.getStringValue());
			jdbcConfig.setUrl(urlElt.getStringValue());
			jdbcConfig.setUserName(userNameElt.getStringValue());
			jdbcConfig.setPassword(passwordElt.getStringValue());
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}			
	}
	
	public static synchronized XmlConfigReader getInstance() {
		if (instance == null) {
			instance = new XmlConfigReader();
		}
		return instance;
	}
	
	/**
	 * 返回jdbc相关配置
	 * @return
	 */
	public JdbcConfig getJdbcConfig() {
		return jdbcConfig;
	}
	
	public static void main(String[] args) {
		JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();
		System.out.println(jdbcConfig);
	}
}

        最后,在JDBC工具类中使用XmlConfigReader对象获取JDBC的配置信息了,代码如下

public class DbUtil {

	/**
	 * 取得Connection
	 * @return
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();
			Class.forName(jdbcConfig.getDriverName());
			conn = DriverManager.getConnection(jdbcConfig.getUrl(), jdbcConfig.getUserName(), jdbcConfig.getPassword());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static void main(String[] args) {
		System.out.println(DbUtil.getConnection());
	}
}

        小结一下:

        DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别是连 Sun 的 JAXM 也在用 DOM4J,还有大名鼎鼎的Hibernate也用它来读取XML配置文件。

你可能感兴趣的:(xml,解析,dom4j)