1。TestXmlToDB类 public void testAddDataByFileType() throws IOException { String xmlFileTypeCd = "01"; XmlToDBUtil xmlToDBUtil = new XmlToDBUtil(); xmlToDBUtil.addDataToDB(xmlFileTypeCd); } 2。xmlToDBUtil类 /** * 把XML数据转化为对象并加入到数据库中的工具类 * @author Alanlin * */ public class XmlToDBUtil extends HibernateDaoSupport{ /** Spring框架应用上下文对象 */ private static ApplicationContext factory = getApplicationContext(); private static XmlToDBUtil xmlToDBUtil = null; //解析后的数据列表 private static List accountCalculationList = null; private static List accountDefinitionList = null; private static List accountMappingRequestToModelList = null; private static List assertionDefitionList = null; private static List formulaDefinitionList = null; private static List bizCodeDefList = null; static{ getApplicationContext(); xmlToDBUtil = (XmlToDBUtil)factory.getBean("xmlToDBUtil"); } /** * 获得Spring框架应用上下文对象 * @return ApplicationContext */ public static ApplicationContext getApplicationContext() { //判断如果 ApplicationContext 的对象 == NULL if ( factory == null ) { try { factory = new ClassPathXmlApplicationContext(new String[]{"applicationContext-daoSupport-test.xml"}); } catch ( Exception e1 ) { e1.printStackTrace(); } } //返回ApplicationContext return factory; } //****************************************************************************** public void addDataToDB(String xmlFileTypeCd) throws IOException { //取得对应的资源文件 InputStream in = getFileInputStream(xmlFileTypeCd); //解析取到的资源文件 this.digestMethod(in,xmlFileTypeCd); //调用对应的执行方法 if("01".equals(xmlFileTypeCd) || "02".equals(xmlFileTypeCd) || "08".equals(xmlFileTypeCd)) { //向数据库添加AccountCalculate和AccountProject数据,以及添加AccountProjectSub数据 this.addAccountCalculationList(xmlToDBUtil, xmlFileTypeCd); } else { //通过统一的方法向数据库添加数据 this.addListContent(xmlFileTypeCd); } } /* *//** * 向数据库添加历史映射文件的主方法 * @throws IOException *//* public void addAccountCalculation() throws IOException { String xmlFileTypeCd = "01"; //取得对应的资源文件 InputStream in = getFileInputStream(xmlFileTypeCd); //解析取到的资源文件 this.digestMethod(in,xmlFileTypeCd); //调用递归算法,循环添加数据 this.addAccountCalculationList(xmlToDBUtil,xmlFileTypeCd); } *//** * 向数据库添加预测映射文件的主方法 * @throws IOException *//* public void addAccountProject() throws IOException { String xmlFileTypeCd = "02"; //取得对应的资源文件 InputStream in = getFileInputStream(xmlFileTypeCd); //解析取到的资源文件 this.digestMethod(in,xmlFileTypeCd); //调用递归算法,循环添加数据 this.addAccountCalculationList(xmlToDBUtil,xmlFileTypeCd); }*/ //****************************************************************************** /** * 获取所需要映射的XML文件 * @return * @throws FileNotFoundException */ private InputStream getFileInputStream(String xmlFileTypeCd) throws FileNotFoundException { InputStream in = null; //历史预测类的 if("01".equals(xmlFileTypeCd)) { in = this.getResourceAsStream(OwnerXmlTypeRoute.ACCOUNT_CALCULATION); } else if("02".equals(xmlFileTypeCd)) { in = this.getResourceAsStream(OwnerXmlTypeRoute.ACCOUNT_PROJECTION); } else if("03".equals(xmlFileTypeCd)) { in = this.getResourceAsStream(OwnerXmlTypeRoute.ACCOUNT_MAPPING_REQUEST_TO_MODEL); } else if("04".equals(xmlFileTypeCd)) { in = this.getResourceAsStream(OwnerXmlTypeRoute.ACCOUNT_DEFINITION); } else if("05".equals(xmlFileTypeCd)) { in = this.getResourceAsStream(OwnerXmlTypeRoute.ASSERTION_DEDINITION); } else if("06".equals(xmlFileTypeCd)) { in = this.getResourceAsStream(OwnerXmlTypeRoute.FORMULA_DEFINITION); } else if("07".equals(xmlFileTypeCd)) { in = this.getResourceAsStream(OwnerXmlTypeRoute.BIZ_CODE_DEF); } else if("08".equals(xmlFileTypeCd)) { in = this.getResourceAsStream(OwnerXmlTypeRoute.ACCOUNT_PROJECTION_SUB); } return in; } /** * 解析XML文件,使文件转化为对象方便储存 */ private void digestMethod(InputStream is,String xmlFileTypeCd) { if(is==null){ throw new RuntimeException(" inputStream is null!!!" ); } try { Digester digester = new Digester(); digester.push(this); digester.setValidating(false); digester.setNamespaceAware(false); //历史预测类的 if("01".equals(xmlFileTypeCd) || "02".equals(xmlFileTypeCd) || "08".equals(xmlFileTypeCd)) { accountCalculationList = new ArrayList(); digester.addObjectCreate("calFinancialAccounts/accountCalEssentials",AccountCalEssentials.class); digester.addSetProperties("calFinancialAccounts/accountCalEssentials"); digester.addSetNext("calFinancialAccounts/accountCalEssentials", "addAccountCalEssentials"); digester.addObjectCreate("*/paramEssentials", ParamEssentials.class); digester.addSetProperties("*/paramEssentials"); digester.addSetNext("*/paramEssentials", "addParamEssentials",ParamEssentials.class.getName()); digester.parse(is); } else if("03".equals(xmlFileTypeCd)) { accountMappingRequestToModelList = new ArrayList(); digester.addObjectCreate("accountmappings/accountmapping",AccountMapping.class); digester.addSetProperties("accountmappings/accountmapping"); digester.addSetNext("accountmappings/accountmapping", "addAccountMapping"); digester.parse(is); } else if("04".equals(xmlFileTypeCd)) { accountDefinitionList = new ArrayList(); digester.addObjectCreate("accounts/account",Account.class); digester.addSetProperties("accounts/account"); digester.addSetNext("accounts/account", "addAccount"); digester.parse(is); } else if("05".equals(xmlFileTypeCd)) { assertionDefitionList = new ArrayList(); digester.addObjectCreate("assertionLibary/assertion",AssertionDefinition.class); digester.addSetProperties("assertionLibary/assertion"); digester.addSetNext("assertionLibary/assertion", "addAssertionDefinition"); digester.addObjectCreate("*/param", ParamDefinition.class); digester.addSetProperties("*/param"); digester.addSetNext("*/param", "addParamDefinition",ParamDefinition.class.getName()); digester.parse(is); } else if("06".equals(xmlFileTypeCd)) { formulaDefinitionList = new ArrayList(); digester.addObjectCreate("formulaLibary/formula",FormulaDefinition.class); digester.addSetProperties("formulaLibary/formula"); digester.addSetNext("formulaLibary/formula", "addFormulaDefinition"); digester.addObjectCreate("*/param", ParamDefinition.class); digester.addSetProperties("*/param"); digester.addSetNext("*/param", "addParamDefinition",ParamDefinition.class.getName()); digester.parse(is); } else if("07".equals(xmlFileTypeCd)) { bizCodeDefList = new ArrayList(); digester.addObjectCreate("bizCodes/bizCode",BizCodeDef.class); digester.addSetProperties("bizCodes/bizCode"); digester.addSetNext("bizCodes/bizCode", "addBizCodeDef"); digester.parse(is); } } catch (Exception ex) { ex.printStackTrace(); } } /** * AccountCalculate和AccountProject使用该方法添加对象 * 该方法为私有类 digestMethod调用的,把该类中解析出来的对象加到 List列表之中 * @param accountCalEssentials */ public static void addAccountCalEssentials(AccountCalEssentials accountCalEssentials){ accountCalculationList.add(accountCalEssentials); } /** * AccountDefinition使用该方法添加对象 * @param account */ public static void addAccount(Account account) { accountDefinitionList.add(account); } /** * AccountMappingRequestToModel使用该方法添加对象 * @param accountMapping */ public static void addAccountMapping(AccountMapping accountMapping){ accountMappingRequestToModelList.add(accountMapping); } /** * AssertionDefinition使用该方法添加对象 * @param assertionDefinition */ public static void addAssertionDefinition(AssertionDefinition assertionDefinition) { assertionDefitionList.add(assertionDefinition); } /** * FormulaDefinition使用该方法添加对象 * @param assertionDefinition */ public static void addFormulaDefinition(FormulaDefinition formulaDefinition) { formulaDefinitionList.add(formulaDefinition); } /** * BizCodeDef使用该方法添加对象 * @param assertionDefinition */ public static void addBizCodeDef(BizCodeDef bizCodeDef) { bizCodeDefList.add(bizCodeDef); } /** * 该方法会 把List列表中的数据批量添加到数据库中 * @throws IOException */ private void addListContent(String xmlFileTypeCd) throws IOException { // List list = null; //历史预测类的 if("03".equals(xmlFileTypeCd)) { xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(accountMappingRequestToModelList); } else if("04".equals(xmlFileTypeCd)) { xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(accountDefinitionList); } else if("05".equals(xmlFileTypeCd)) { for(int i=0;i<assertionDefitionList.size();i++) { AssertionDefinition assertionDefinition = (AssertionDefinition)assertionDefitionList.get(i); assertionDefinition.setOwner(xmlFileTypeCd); List paramDefinitionList = assertionDefinition.getAssertionParamDefinitionList(); if(paramDefinitionList != null && paramDefinitionList.size()>0) { for(int j=0;j<paramDefinitionList.size();j++) { ParamDefinition paramDefinition = (ParamDefinition)paramDefinitionList.get(j); paramDefinition.setParentIdentityName(assertionDefinition.getAssertionIdentityName()); paramDefinition.setOwner(xmlFileTypeCd); } xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(paramDefinitionList); } } xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(assertionDefitionList); } else if("06".equals(xmlFileTypeCd)) { for(int i=0;i<formulaDefinitionList.size();i++) { FormulaDefinition formulaDefinition = (FormulaDefinition)formulaDefinitionList.get(i); formulaDefinition.setOwner(xmlFileTypeCd); List paramDefinitionList = formulaDefinition.getFormulaParamDefinitionList(); if(paramDefinitionList != null && paramDefinitionList.size()>0) { for(int j=0;j<paramDefinitionList.size();j++) { ParamDefinition paramDefinition = (ParamDefinition)paramDefinitionList.get(j); paramDefinition.setParentIdentityName(formulaDefinition.getFormulaIdentityName()); paramDefinition.setOwner(xmlFileTypeCd); } xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(paramDefinitionList); } } xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(formulaDefinitionList); } else if("07".equals(xmlFileTypeCd)) { xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(bizCodeDefList); } } /** * 该方法 会调用后来的递归方法,把对象依次加入数据库中 * @param xmlToDBUtil * @return * @throws IOException */ private List addAccountCalculationList(XmlToDBUtil xmlToDBUtil,String xmlFileTypeCd) throws IOException { int accountSize = accountCalculationList.size(); List paramEssentialsList = null; StringBuffer sb = null; if(accountCalculationList != null && accountSize> 0) { for(int i=0;i<accountSize;i++) { AccountCalEssentials accountCalEssentials = (AccountCalEssentials)accountCalculationList.get(i); accountCalEssentials.setOwner(xmlFileTypeCd); sb = new StringBuffer(); sb.append(accountCalEssentials.getAccountCode()); paramEssentialsList = accountCalEssentials.getParamEssentialsList(); this.showParamEssentials(paramEssentialsList,sb,xmlToDBUtil,sb.toString(),xmlFileTypeCd); xmlToDBUtil.getHibernateTemplate().saveOrUpdate(accountCalEssentials); } } return accountCalculationList; } /** * 该方法为递归调用方法的调用者 * @param paramEssentialsList * @param sb * @param xmlToDBUtil * @param accountCode */ private void showParamEssentials(List paramEssentialsList,StringBuffer sb,XmlToDBUtil xmlToDBUtil,String accountCode,String xmlFileTypeCd) { this.calParamEssentials(paramEssentialsList, sb.toString(),true,xmlToDBUtil,accountCode,xmlFileTypeCd); } /** * 该方法为递归方法,循环调用自己,直至把所有的文件都加到数据库中为止 * @param paramEssentialsList * @param parentNum * @param isTop * @param xmlToDBUtil * @param accountCode * @return */ private StringBuffer calParamEssentials(List paramEssentialsList,String parentNum,boolean isTop,XmlToDBUtil xmlToDBUtil,String accountCode,String xmlFileTypeCd) { if(paramEssentialsList != null && paramEssentialsList.size() >0) { for(int j=0;j<paramEssentialsList.size();j++) { ParamEssentials paramEssentials = (ParamEssentials)paramEssentialsList.get(j); if(paramEssentials.getParamEssentialsList() != null && paramEssentials.getParamEssentialsList().size()>0) { paramEssentials.setParamNum(parentNum+"_0" + (j+1)); if(parentNum.length()<11) { paramEssentials.setAccountCode(accountCode); } if(isTop){ paramEssentials.setParentParamNum("0"); }else{ paramEssentials.setParentParamNum(parentNum); } paramEssentials.setOwner(xmlFileTypeCd); xmlToDBUtil.getHibernateTemplate().saveOrUpdate(paramEssentials); this.calParamEssentials(paramEssentials.getParamEssentialsList(),paramEssentials.getParamNum(),false,xmlToDBUtil,accountCode,xmlFileTypeCd); } else { paramEssentials.setParamNum(parentNum+"_0"+(j+1)); if(parentNum.length()<11) { paramEssentials.setAccountCode(accountCode); } if(isTop){ paramEssentials.setParentParamNum("0"); }else{ paramEssentials.setParentParamNum(parentNum); } paramEssentials.setOwner(xmlFileTypeCd); xmlToDBUtil.getHibernateTemplate().saveOrUpdate(paramEssentials); } } } return null; } private InputStream getResourceAsStream(String resouce) { ClassLoader cl = XmlToDBUtil.class.getClassLoader(); if( cl!=null ) return cl.getResourceAsStream( resouce ); else return ClassLoader.getSystemResourceAsStream( resouce ); } 3。OwnerXmlTypeRoute类 public static final String ACCOUNT_ROOT = "cn/ccb/faengine/foundation/model/commoncorporation/"; public static final String ACCOUNT_CALCULATION = ACCOUNT_ROOT + "AccountCalculation.xml"; public static final String ACCOUNT_MAPPING_REQUEST_TO_MODEL = ACCOUNT_ROOT + "AccountMappingRequestToModel.xml"; public static final String ACCOUNT_PROJECTION = ACCOUNT_ROOT + "AccountProjection.xml"; public static final String ACCOUNT_PROJECTION_SUB = ACCOUNT_ROOT + "AccountProjectionSub.xml"; public static final String ACCOUNT_DEFINITION = ACCOUNT_ROOT + "AccountDefinition.xml"; public static final String TOOLLIB_ROOT = "cn/ccb/faengine/foundation/toollib/"; public static final String ASSERTION_DEDINITION = TOOLLIB_ROOT + "AssertionDefinition.xml"; public static final String FORMULA_DEFINITION = TOOLLIB_ROOT + "FormulaDefinition.xml"; public static final String BIZ_CODE_DEF = "cn/ccb/faengine/common/bizcode/BizCode.xml"; Spring以及Hibernate配置文件的内容省略。。。