Properties文件的XML格式

xiaoxiao2021-02-28  163

项目(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使用解析错误。要对"<"进行转义(<)才能正常解析。        所以,不单只是在XML中,还有在脚本或样式表,如果在中使用特殊字符(例如 < 或 &)或实体引用(例如 < 或 &)或程序代码,则需要将脚本或样式表的内容标记为 CDATA(字符数据)节,在CDATA内部的所有内容都会被解析器忽略,这样就能够正常解析。

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

转载请注明原文地址: https://www.6miu.com/read-25873.html

最新回复(0)