commons-configuration的使用

[color=red][align=center]关于apache commons的综合使用[/align][/color]
背景:开发一个使用xml配置文件来处理跨数据库的数据操作。例如,我本地有一个mysql数据库叫A,里面有一个表叫test,test有两个字段,fistName和lastName;另一个服务器上有一个Oracle数据库叫B,里面有两个表,test1,test2,他两的结构是一样的,都有,Name这个字段;现在就是要把A中的表test里的fistName和lastName做字符串连接,然后存到B中的表test1,test2的Name字段。
[align=center][color=red]commons-configuration的使用[/color][/align] 得到XMLConfiguration 的几种方式
XMLConfiguration config  = new XMLConfiguration(String);

XMLConfiguration config = new XMLConfiguration();
config.load(String);

我自己是不喜欢操作xml的,所以就没有使用dom4j和jdom的习惯。使用commons-configuration令我最爽的地方是指针式的访问方式,例如,在如下xml中,如果你得到code属性的值,只需要写如下Java代码
List codes = config.getList("columns.column.[@code]");
  <?xml version="1.0" encoding="UTF-8"?>	
<origin dataSource="ds">

<columns>
<column code="ID" name="" type="java.lang.Integer" length="" />
<column code="FIRSTNAME" name="" type="java.lang.String" length="" />
<column code="LASTNAME" name="" type="java.lang.String" length="" />
<column code="SEX" name="" type="java.lang.String" length="" />
</columns>
</origin>

如果你的得到的字符串中有逗号,那么他会以","分割,只会得到第一个字符串。所以你必须用"\"转义,例如
 String array = config.getString("config.array"); //array="10",并不是10,20,30,40
String scalar = config.getString("config.scalar"); // scalar="3,1415"
String text = config.getString("config.cite.[@text]"); // text ="To be or not to be, this is the question!"


<config>
<array>10,20,30,40</array>
<scalar>3\,1415</scalar>
<cite text="To be or not to be\, this is the question!"/>
</config>

默认情况下,config以","分割字符串,其实还可以使用如下方法(AbstractConfiguration 是XMLConfiguration 的父类)
AbstractConfiguration.setListDelimiter(char listDelimiter) //设置限定符
AbstractConfiguration.setDelimiterParsingDisabled(boolean) //设置限定符是否有效

[color=darkred]注意:以上方法的设置要xml文件load之前(换而言之,是不能使用XMLConfiguration config = new XMLConfiguration(String)),否则,此次设置将无效,正确使用如下方式[/color]

XMLConfiguration config = new XMLConfiguration();
config.setDelimiterParsingDisabled(true);
try {
config.load(path);
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error("载入文件出错",e);
}

还有一个比较常用的方法,例如你想把column中的属性全部取出到一个叫Bean的Java类中,你就必须定位到column,这时常用以下方式
List<HierarchicalConfiguration>  columns = (List<HierarchicalConfiguration>) config.configurationsAt("origin.columns.column");
List Beans = new ArrayList(columns.size());
for (int i = 0; i < columns.size(); i++) {
HierarchicalConfiguration column = (HierarchicalConfiguration)columns.get(i);
Bean bean = new Bean();
bean.setCode(column.getString("[@code]"));
bean.setName(column.getString("[@name]"));
...
...
beans.add(bean);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值