介绍介绍DOM4J。 据说是非常优秀非常优秀的Java XML API( Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.
介绍介绍DOM4J。
据说是非常优秀非常优秀的Java XML API(Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.)。
关于XML文件。
A君问了我一个问题,为什么java中XML作为配置文件,为什么不用其他的呢?像text文件等等。
我的第一个反应是,为(喂)什么就吃什么。。。然后再问为什么。。。开始的时候模仿着做,时间长的时候思
考一些经常使用的东西的原因,就像为什么同一个公司,他的职位比我高一样。。。我们需要的是思考和学习。。。
转回来说说我们配置文件的特点:我们在这里的配置文件需要能够存放少量的数据,并易于操作和维护。所以在
开始进行选择的时候就会综合考虑,text的特性,编码问题等等。所以综合考虑的话就会把XML作为j2ee的一个标准
而不是text作为j2ee的标准。(仅是我的理解......)
最开始我们连接数据库的方式:
/** * 取得connection * @return * */ public static Connection getConnection() throws ClassNotFoundException { //数据库连接对象。 Connection conn = null; try { //驱动名称。 Class.forName("oracle.jdbc.driver.OracleDriver"); //数据库连接字符串。 String url = "jdbc:oracle:thin:@localhost:1521:BJPOWERNODE"; //oracle数据库用户名和密码。 String username = "drp"; String password = "drp"; //连接数据库。 conn = DriverManager.getConnection(url, username, password); }catch(ClassNotFoundException e){ //打印错误。 e.printStackTrace(); }catch(SQLException e){ //打印错误。 e.printStackTrace(); } //返回连接对象。 return conn; }
进行了些许的优化:
我们把一些连接数据的配置文件放到XML文件中,很明显,我们这样做的目的,为了改变方便。从变化的角度来
预测问题,所以把最开始的配置数据放到连接数据库类的代码中,抽取出来了,我们放到了配置文件中。
连接的配置信息,我们放到web.xml中。
<?xml version="1.0" encoding="UTF-8"?> <config> <db-info> <driver-name>oracle.jdbc.driver.OracleDriver</driver-name> <url>jdbc:oracle:thin:@localhost:1521:BJPOWERNODE</url> <user-name>drp</user-name> <password>drp</password> </db-info> </config>
这样抽取出来的话,我们要从这个XML文件中读取一些驱动名称,连接字符串,用户名称和密码信息了。
如果我们把读取和连接放到连接这个类(DbUtil数据库操作工具类)中的话,这个类的职责就太重,这样不利于
大型系统的扩展工作。于是,我们把读取配置文件这个工作给了专门的一个类来干这件事情,我们命名他为
XmlConfigReader ,用这个类读取XML文件。
从网上查找关于读取XML文件的文章,源码也很多,据说有四种方式,http://developer.51cto.com/art/201106/270685.htm 在这里就不详细说明了。我们这里采用的是DOM4j的方式来读取XML文件。主要是引入dom4j相应的包和在使用过程中查看dom4j的API就可以喽。
读取配置文件,我们读取的是字符串,驱动名称,连接字符串,用户名称和密码信息,他们是一个整体,我们函
数的返回值如果是字符串的话,再连接数据库的时候还要把这个长长的字符串分开,这样很不方便。于是我们把他们
进行了封装,我们把他们封装成为一个配置的工具类,JdbcConfig,这样我们传递一个整体就可以了。就像人是一个
整体的,我们不要把他的胳膊腿等分开传递。
我们封装的配置文件实体类:
/** * jdbc配置信息。 * @author lovesummer * */ public class JdbcConfig { //连接字符串。 private String url; //用户名。 private String userName; //密码。 private String password; //驱动器的名称。 private String driverName; 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; } //覆盖object的toString方法。 @Override public String toString() { // TODO Auto-generated method stub return this.getClass().getName() + "{driverName:" + driverName + ", url:" + url + ",userName :" + userName + "}"; } }
我们读取配置文件的类:
package com.bjpowernode.drp.util; import java.io.InputStream; import javax.servlet.jsp.tagext.TryCatchFinally; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; //读取配置文件类。 /** * 采用单例模式解析sys-config.xml文件。 * 解析sys-config.xml文件。 *@author lovesummer * */ public class XmlConfigReader { //勤汉式。 //私有的静态的成员变量。 private static XmlConfigReader instance = new XmlConfigReader(); //保存jdbc相关配置信息对象。 private JdbcConfig jdbcconfig = new JdbcConfig(); //私有的构造方法。 private XmlConfigReader() { SAXReader reader = new SAXReader(); //拿到当前线程。 InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml"); try { Document doc = reader.read(in); //取得xml中的Element。1 、取出驱动器的名字。 Element driverNameElt = (Element)doc.selectObject("/config/db-info/driver-name"); //2 、取出url字符串。 Element urlElt = (Element)doc.selectObject("/config/db-info/url"); //3、取出用户名称和密码。 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) { // 打印错误 e.printStackTrace(); } } //公共的静态的入口方法。 public static XmlConfigReader getInstance() { return instance; } /** * 返回jdbc相关配置。 * @return */ public JdbcConfig getJdbcConfig(){ return jdbcconfig; } }
优化后我们连接数据库的类(就像改革开放前后的中国):
/** * 封装数据库常用操作,工具类 * @author lovesummer * */ public class DbUtil { /** * 取得connection * @return * */ public static Connection getConnection() throws ClassNotFoundException { Connection conn = null; try { //新建jdbc配置类。 JdbcConfig jdbcconfig = XmlConfigReader.getInstance().getJdbcConfig(); //取出驱动器的名字。 Class.forName(jdbcconfig.getDriverName()); //取得连接对象。 conn = DriverManager.getConnection(jdbcconfig.getUrl(), jdbcconfig.getUserName(), jdbcconfig.getPassword()); } catch (ClassNotFoundException e) { // 抛出 exception e.printStackTrace(); }catch(SQLException e) { e.printStackTrace(); } return conn; } //测试。 public static void main(String[] args ) throws ClassNotFoundException{ System.out.println(DbUtil.getConnection()); } }
优化后把每个类的职责都分工明确了,在这基础上还可以再进行优化的。在这里就不讲述了。在这过程中学习到了
代码优化的这种思维方式,装上了程序员的思想,代码就这样一步步有了灵魂........加油.....

MySQL通過異步、半同步和組複製三種模式處理數據複製。 1)異步複製性能高但可能丟失數據。 2)半同步複製提高數據安全性但增加延遲。 3)組複製支持多主複製和故障轉移,適用於高可用性需求。

EXPLAIN語句可用於分析和提升SQL查詢性能。 1.執行EXPLAIN語句查看查詢計劃。 2.分析輸出結果,關注訪問類型、索引使用情況和JOIN順序。 3.根據分析結果,創建或調整索引,優化JOIN操作,避免全表掃描,以提升查詢效率。

使用mysqldump進行邏輯備份和MySQLEnterpriseBackup進行熱備份是備份MySQL數據庫的有效方法。 1.使用mysqldump備份數據庫:mysqldump-uroot-pmydatabase>mydatabase_backup.sql。 2.使用MySQLEnterpriseBackup進行熱備份:mysqlbackup--user=root--password=password--backup-dir=/path/to/backupbackup。恢復時,使用相應的命

MySQL慢查詢的主要原因包括索引缺失或不當使用、查詢複雜度、數據量過大和硬件資源不足。優化建議包括:1.創建合適的索引;2.優化查詢語句;3.使用分錶分區技術;4.適當升級硬件。

MySQL視圖是基於SQL查詢結果的虛擬表,不存儲數據。 1)視圖簡化複雜查詢,2)增強數據安全性,3)維護數據一致性。視圖是數據庫中的存儲查詢,可像表一樣使用,但數據動態生成。

mysqldiffersfromothersqldialectsinsyntaxforlimit,自動啟動,弦樂範圍,子征服和表面上分析。 1)MySqluessLipslimit,whilesqlserverusestopopandoraclesrontersrontsrontsrontsronnum.2)

MySQL分區能提升性能和簡化維護。 1)通過按特定標準(如日期範圍)將大表分成小塊,2)物理上將數據分成獨立文件,3)查詢時MySQL可專注於相關分區,4)查詢優化器可跳過不相關分區,5)選擇合適的分區策略並定期維護是關鍵。

在MySQL中,如何授予和撤銷權限? 1.使用GRANT語句授予權限,如GRANTALLPRIVILEGESONdatabase_name.TO'username'@'host';2.使用REVOKE語句撤銷權限,如REVOKEALLPRIVILEGESONdatabase_name.FROM'username'@'host',確保及時溝通權限變更。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver CS6
視覺化網頁開發工具