packagecom.ims.persistence.base;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;importjava.text.MessageFormat;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importorg.apache.commons.digester3.Digester;importorg.apache.commons.lang3.StringUtils;importorg.apache.log4j.Logger;public classSqlXmlParser {privateString sqlXml;private staticDigester digester;private static String webrootPath = System.getProperty("webapp.root")+"sql/";private static Logger logger = Logger.getLogger(SqlXmlParser.class);static{
digester= newDigester();
digester.setValidating(false);
digester.addObjectCreate("set", SqlSet.class);
digester.addObjectCreate("set/sql", Sql.class);
digester.addSetProperties("set/sql");
digester.addBeanPropertySetter("set/sql/pattern");
digester.addSetNext("set/sql", "addSql");
digester.addObjectCreate("set/sql/param", SqlParam.class);
digester.addSetProperties("set/sql/param");
digester.addSetNext("set/sql/param", "addParam");
}publicSqlXmlParser(String sqlXml){this.sqlXml =sqlXml;
}public String parse(String sqlName, Mapparams){
InputStream is= null;
String result= null;try{
is= new FileInputStream(new File(webrootPath+sqlXml));
SqlSet sqlSet=(SqlSet)digester.parse(is);
Sql sql=sqlSet.getSqls().get(sqlName);
List paramList = new ArrayList();for(SqlParam param : sql.getCondition()){
String value=params.get(param.getName());
paramList.add(param.getPosition(), StringUtils.isBlank(value)?"":value);
}
result=MessageFormat.format(sql.getPattern(), paramList.toArray());
}catch(Exception e1){
logger.error("sql文件解析异常:"+e1);
}finally{if(is != null) {try{
is.close();
}catch(Exception e2) {
logger.error("sql文件流关闭异常:"+e2);
}
is= null;
digester.clear();
}
}returnresult;
}
}