@Test public void testThatFilesAreTheSameAfterMerge() throws Exception { DefaultXmlFormatter xmlFormatter = new DefaultXmlFormatter(); Properties p = new Properties(); p.setProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE, "true"); CommentGenerator commentGenerator = new DefaultCommentGenerator(); commentGenerator.addConfigurationProperties(p); Document document = new Document( XmlConstants.MYBATIS3_MAPPER_PUBLIC_ID, XmlConstants.MYBATIS3_MAPPER_SYSTEM_ID); document.setRootElement(getSqlMapElement(commentGenerator)); GeneratedXmlFile generatedFile1 = new GeneratedXmlFile( document, "TestMapper.xml", "org.mybatis.test", "src", true, xmlFormatter); InputSource is1 = new InputSource(new StringReader(generatedFile1.getFormattedContent())); GeneratedXmlFile generatedFile2 = new GeneratedXmlFile( document, "TestMapper.xml", "org.mybatis.test", "src", true, xmlFormatter); InputSource is2 = new InputSource(new StringReader(generatedFile2.getFormattedContent())); String mergedSource = XmlFileMergerJaxp.getMergedSource(is1, is2, "TestMapper.xml"); assertEquals(generatedFile1.getFormattedContent(), mergedSource); }
@Override public List<GeneratedXmlFile> contextGenerateAdditionalXmlFiles() { Document document = new Document( XmlConstants.IBATIS2_SQL_MAP_CONFIG_PUBLIC_ID, XmlConstants.IBATIS2_SQL_MAP_CONFIG_SYSTEM_ID); XmlElement root = new XmlElement("sqlMapConfig"); // $NON-NLS-1$ document.setRootElement(root); root.addElement(new TextElement("<!--")); // $NON-NLS-1$ root.addElement( new TextElement(" This file is generated by MyBatis Generator.")); // $NON-NLS-1$ root.addElement( new TextElement( " This file is the shell of an SqlMapConfig file - in many cases you will need to add")); //$NON-NLS-1$ root.addElement( new TextElement(" to this file before it is usable by iBATIS.")); // $NON-NLS-1$ StringBuilder sb = new StringBuilder(); sb.append(" This file was generated on "); // $NON-NLS-1$ sb.append(new Date()); sb.append('.'); root.addElement(new TextElement(sb.toString())); root.addElement(new TextElement("-->")); // $NON-NLS-1$ XmlElement settings = new XmlElement("settings"); // $NON-NLS-1$ settings.addAttribute( new Attribute("useStatementNamespaces", "true")); // $NON-NLS-1$ //$NON-NLS-2$ root.addElement(settings); XmlElement sqlMap; for (String sqlMapFile : sqlMapFiles) { sqlMap = new XmlElement("sqlMap"); // $NON-NLS-1$ sqlMap.addAttribute(new Attribute("resource", sqlMapFile)); // $NON-NLS-1$ root.addElement(sqlMap); } GeneratedXmlFile gxf = new GeneratedXmlFile( document, properties.getProperty("fileName", "SqlMapConfig.xml"), // $NON-NLS-1$ //$NON-NLS-2$ properties.getProperty("targetPackage"), // $NON-NLS-1$ properties.getProperty("targetProject"), // $NON-NLS-1$ false, context.getXmlFormatter()); List<GeneratedXmlFile> answer = new ArrayList<GeneratedXmlFile>(1); answer.add(gxf); return answer; }
@Override public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) { XmlElement parentElement = document.getRootElement(); // 产生分页语句前半部分 XmlElement paginationPrefixElement = new XmlElement("sql"); paginationPrefixElement.addAttribute(new Attribute("id", "OracleDialectPrefix")); XmlElement pageStart = new XmlElement("if"); pageStart.addAttribute(new Attribute("test", "page != null")); XmlElement pageDialect1 = new XmlElement("if"); pageDialect1.addAttribute(new Attribute("test", "dialect == 'oracle'")); pageStart.addElement(pageDialect1); pageDialect1.addElement( new TextElement("select * from ( select row_.*, rownum rownum_ from ( ")); paginationPrefixElement.addElement(pageStart); parentElement.addElement(paginationPrefixElement); // 产生分页语句后半部分 XmlElement paginationSuffixElement = new XmlElement("sql"); paginationSuffixElement.addAttribute(new Attribute("id", "OracleDialectSuffix")); XmlElement pageEnd = new XmlElement("if"); pageEnd.addAttribute(new Attribute("test", "page != null")); XmlElement pageDialect2 = new XmlElement("if"); pageDialect2.addAttribute(new Attribute("test", "dialect == 'oracle'")); pageEnd.addElement(pageDialect2); pageDialect2.addElement( new TextElement( "<![CDATA[ ) row_ ) where rownum_ > #{page.start} and rownum_ <= #{page.pageSize} ]]>")); // ----- mysql语句。 XmlElement mysqlDialect = new XmlElement("if"); mysqlDialect.addAttribute(new Attribute("test", "dialect == 'mysql'")); pageEnd.addElement(mysqlDialect); mysqlDialect.addElement(new TextElement("limit #{page.start} , #{page.pageSize}")); paginationSuffixElement.addElement(pageEnd); parentElement.addElement(paginationSuffixElement); return super.sqlMapDocumentGenerated(document, introspectedTable); }