Properties文件的XML格式

项目(jht项目)中用到了在xml文件中定义sql脚本。属于properties类型的,刚开始不明白为什么要用xml来定义,而不是直接在.properties文件定义呢?

百度后发现一个说法是:想必大家都用过*.properties文件,作为配置文件。但是,如果该文件写入了中文,待编译后内容就会成为乱码,使用native命令也好、使用ant执行编码转换也好,多少有点麻烦,与其如此,我们不如直接使用properties的xml格式。

代码结构:


sql.xml文件用于配置sql语句:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>SQL脚本</comment>
	
	<entry key="sql_get_park_ticket_discount">
	    <![CDATA[SELECT * FROM discount]]>
	</entry>
	
	<entry key="sql_get_park_in_list">
	    <![CDATA[SELECT * FROM TABLE_NAME]]>
	</entry>
	
</properties>  

SqlConfig.java用于取xml中的sql工具类:

package utils;

import java.io.IOException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;

public class SqlConfig {

	private Properties properties = new Properties();
	
	private static volatile SqlConfig sqlConfig = null;
	
	/**
	 * 使用双重锁的单例模式维持一个sqlConfig对象
	 * @return
	 */
	public static SqlConfig getInstance(){
		if (null == sqlConfig) {
			synchronized (SqlConfig.class) {
				if(null == sqlConfig){
					sqlConfig = new SqlConfig();
				}
			}
		} 
		return sqlConfig;
	}
	
	/**
	 * 定义获取根据sql名字来获取sql的方法
	 * @param key
	 * @return
	 */
	public String getSql(String key){
		return properties.getProperty(key);
	}
	
	/**
	 * 将构造函数私有化
	 */
	private SqlConfig(){
		try {
			initSqlXml("sql.xml");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 加载sql.xml配置文件
	 * @param filePathName
	 * @throws InvalidPropertiesFormatException
	 * @throws IOException
	 */
	private void initSqlXml(String filePathName) throws InvalidPropertiesFormatException, IOException {
		properties.loadFromXML(this.getClass().getClassLoader().getResourceAsStream(filePathName));
	}

}

Test.java用于测试:

package test;

import utils.SqlConfig;

public class Test {

	public static void main(String[] args) {
		System.out.println(SqlConfig.getInstance().getSql("sql_get_park_ticket_discount"));
	}
}

测试结果:

SELECT * FROM discount

要关注的问题:

1.用.xml文件配置属性相对于用.properties的好处

2.Properties文件的xml格式(dtd是什么,为什么要用?,见另外一篇博文的介绍)

3.读取xml文件的方法


XML文件中的<![CDATA[]]>是什么意思?

答:在XML文档中的所有文本都会被解析器解析,只有在CDATA部件之内的文本会被解析器忽略。比如文本内容中使用“<”这样的特殊字符时,XML使用解析错误。要对"<"进行转义(&lt;)才能正常解析。 
      所以,不单只是在XML中,还有在脚本或样式表,如果在中使用特殊字符(例如 < 或 &)或实体引用(例如 < 或 &)或程序代码,则需要将脚本或样式表的内容标记为 CDATA(字符数据)节,在CDATA内部的所有内容都会被解析器忽略,这样就能够正常解析。


参考文章:http://snowolf.iteye.com/blog/404762

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值