根据传入的条件解析对应的XML文件,并存入数据库
2010-05-19 14:55
239 查看
1。TestXmlToDB类
2。xmlToDBUtil类
3。OwnerXmlTypeRoute类
Spring以及Hibernate配置文件的内容省略。。。
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配置文件的内容省略。。。
相关文章推荐
- 根据hibernate.cfg.xml配置文件和相应实体类及其.hbm.xml文件生成对应的数据库表
- 单例设计模式中使用dom4j来完成(数据库配置文件)xml的解析,并完成数据库的连接
- 根据xml的标签解析文件的Demo
- Excel文件上传服务器并解析存入数据库的整套过程(2003--2013都可试)
- 使用XML作为项目的配置文件使用,并解析之,获得数据作为链接数据库的参数
- 上传xls文件并解析数据存入msyql数据库
- 将上传文件以二进制形式存入数据库中,并下载数据库中的二进制数据生成对应的文件
- 根据XML文件创建对应的XMLSchema(XSD文件)
- PHP中XPATH 实现xml及html文件快速解析(附xml做小型数据库实现六级单词快速查询实例)
- 根据数据库文件,查找对应的数据库
- Ajax实现xml文件数据插入数据库(一)--- 构建解析xml文件的js库
- Java解析Excel文件并把数据存入数据库
- Android-解析/生成xml、文件读写、数据库操作
- Java解析txt文件中json数据到List<entity>,并存入数据库
- JAVA 根据URL获取JSON数据,并解析后存入数据库
- JBoss AS 6.1.0 Final 启动的xml描述文件解析与对应的解析类
- Dom4j解析XML来读取数据库配置文件信息
- Java根据年龄段获取对应年份起始时间戳和最终时间戳、根据生日时间戳获取月份(与数据库的时间戳处理成的月份拼接成SQL条件)
- 使用XML作为项目的配置文件使用,并解析之,获得数据作为链接数据库的参数
- 平面文件根据XSD定义生成对应的XML结构文件