根据传入的条件解析对应的XML文件,并存入数据库

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;i0) { for(int j=0;j0) { for(int j=0;j 0) { for(int i=0;i0) { for(int j=0;j0) { 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配置文件的内容省略。。。

 

 

 

 

 

你可能感兴趣的:(JAVA技术)