You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by jg...@apache.org on 2008/12/19 00:11:18 UTC
svn commit: r727852 - in /ibatis/trunk/java/tools/ibator/core: build/
buildsupport/org/apache/ibatis/ibator/build/test/ doc/ htmldoc/
htmldoc/configreference/ htmldoc/reference/
src/org/apache/ibatis/ibator/api/ src/org/apache/ibatis/ibator/config/ src...
Author: jgbutler
Date: Thu Dec 18 15:11:17 2008
New Revision: 727852
URL: http://svn.apache.org/viewvc?rev=727852&view=rev
Log:
[ibator] further improvements and documentation of the plugin API
Added:
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/plugins/RenameExampleClassPlugin.java
Removed:
ibatis/trunk/java/tools/ibator/core/buildsupport/org/apache/ibatis/ibator/build/test/
Modified:
ibatis/trunk/java/tools/ibator/core/build/build.xml
ibatis/trunk/java/tools/ibator/core/build/version.properties
ibatis/trunk/java/tools/ibator/core/doc/ReleaseNotes.txt
ibatis/trunk/java/tools/ibator/core/htmldoc/configreference/ibatorPlugin.html
ibatis/trunk/java/tools/ibator/core/htmldoc/reference/pluggingIn.html
ibatis/trunk/java/tools/ibator/core/htmldoc/whatsNew.html
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IbatorPlugin.java
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IbatorPluginAdapter.java
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/config/IbatorContext.java
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/IbatorPluginAggregator.java
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/util/messages/messages.properties
ibatis/trunk/java/tools/ibator/core/testJava5/ibatortest/ibatorConfig.xml
Modified: ibatis/trunk/java/tools/ibator/core/build/build.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/build/build.xml?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/build/build.xml (original)
+++ ibatis/trunk/java/tools/ibator/core/build/build.xml Thu Dec 18 15:11:17 2008
@@ -41,7 +41,6 @@
<path id="emma.runtime.path">
<pathelement location="${work.instrumented}"/>
<pathelement location="${work.classes}"/>
- <pathelement location="${work.buildsupport}"/>
<path refid="emma.lib"/>
</path>
Modified: ibatis/trunk/java/tools/ibator/core/build/version.properties
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/build/version.properties?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/build/version.properties (original)
+++ ibatis/trunk/java/tools/ibator/core/build/version.properties Thu Dec 18 15:11:17 2008
@@ -1,4 +1,4 @@
#Ibator build version info
-#Thu Dec 18 11:42:11 CST 2008
+#Thu Dec 18 16:54:10 CST 2008
version=1.2.1
-buildNum=673
+buildNum=678
Modified: ibatis/trunk/java/tools/ibator/core/doc/ReleaseNotes.txt
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/doc/ReleaseNotes.txt?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/doc/ReleaseNotes.txt (original)
+++ ibatis/trunk/java/tools/ibator/core/doc/ReleaseNotes.txt Thu Dec 18 15:11:17 2008
@@ -13,6 +13,10 @@
2. Added methods to IntrospectedTable to get/set attributes. This
allows plugin classes to maintain table based state between
plugin calls.
+3. Added "initialized" method to the plugin API. This
+ allows plugins to alter some of the fundamental code generation items
+ (like the name of a generated class, for example).
+4. Added an example plugin to show usage of the "initialized" method.
-------------------------------------------------------------------------------
Version 1.2.0: Renamed to Ibator
Modified: ibatis/trunk/java/tools/ibator/core/htmldoc/configreference/ibatorPlugin.html
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/htmldoc/configreference/ibatorPlugin.html?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/htmldoc/configreference/ibatorPlugin.html (original)
+++ ibatis/trunk/java/tools/ibator/core/htmldoc/configreference/ibatorPlugin.html Thu Dec 18 15:11:17 2008
@@ -53,6 +53,21 @@
dependancy in this simple plugin.</p></td>
</tr>
<tr>
+ <td valign="top"><code>(package).RenameExampleClassPlugin</code></td>
+ <td>This plugin demonstrates usage of the <code>initialized</code> method
+ by renaming the generated example classes generated by Ibator.
+ <p>This plugin accepts two properties:</p>
+ <ul>
+ <li><tt>searchString</tt> (required) a regular expression used to search
+ the default generated name of the example class.</li>
+ <li><tt>replaceString</tt> (required) the string to be inserted on matches of the
+ <tt>searchString</tt>.</li>
+ </ul>
+ <p>For example, to rename the generated example classes from xxxExample to
+ xxxCriteria, specify <tt>Example$</tt> for <tt>searchString</tt>
+ and <tt>Criteria</tt> for <tt>replaceString</tt></p></td>
+ </tr>
+ <tr>
<td valign="top"><code>(package).SerializablePlugin</code></td>
<td>This plugin adds the marker interface <code>java.io.Serializable</code> to the
Java model objects generated by Ibator. This plugin also adds the
Modified: ibatis/trunk/java/tools/ibator/core/htmldoc/reference/pluggingIn.html
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/htmldoc/reference/pluggingIn.html?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/htmldoc/reference/pluggingIn.html (original)
+++ ibatis/trunk/java/tools/ibator/core/htmldoc/reference/pluggingIn.html Thu Dec 18 15:11:17 2008
@@ -25,6 +25,14 @@
class provides basic plugin support, and implements no-operation methods for most of the
interface methods (similar to Swing adapter classes).</p>
+<p>Ibator supplies several plugins (all are in the package
+<code>org.apache.ibatis.ibator.plugins</code>). The supplied plugins demonstrate
+different types of tasks that can be accomplished with Ibator plugins. Source
+code for the plugins is available with the Ibator downloads, or can be viewed
+online
+<a target="_blank" href="http://svn.apache.org/repos/asf/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/plugins/">
+here</a>.</p>
+
<h2>Plugin Lifecycle</h2>
<p>Plugins have a lifecycle. Plugins are created during the initialization of the code
generation process and are called, in order, in different phases of the process. The following
@@ -37,7 +45,7 @@
then no further methods in the plugin will be called</li>
<li>For each table in the configuration:
<ol type="a">
- <li><code>attributesCalculated</code> method called</li>
+ <li><code>initialized</code> method called</li>
<li>DAO Methods:<sup>1,2</sup>
<ol type="i">
<li><code>daoXXXMethodGenerated(Method, TopLevelClass, IntrospectedTable)</code> - these methods
Modified: ibatis/trunk/java/tools/ibator/core/htmldoc/whatsNew.html
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/htmldoc/whatsNew.html?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/htmldoc/whatsNew.html (original)
+++ ibatis/trunk/java/tools/ibator/core/htmldoc/whatsNew.html Thu Dec 18 15:11:17 2008
@@ -31,9 +31,11 @@
<li>Added methods to IntrospectedTable to get/set attributes. This
allows plugin classes to maintain table based state between
plugin calls.</li>
- <li>Added <code>attributesCalculated</code> method to the plugin API. This
+ <li>Added <code>initialized</code> method to the plugin API. This
allows plugins to alter some of the fundamental code generation items
(like the name of a generated class, for example).</li>
+ <li>Added an example plugin to show usage of the <code>initialized</code>
+ method.</li>
</ul>
<h2>Version 1.2.0</h2>
Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IbatorPlugin.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IbatorPlugin.java?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IbatorPlugin.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IbatorPlugin.java Thu Dec 18 15:11:17 2008
@@ -37,7 +37,7 @@
* <ol>
* <li>The setXXX methods are called one time</li>
* <li>The validate method is called one time</li>
- * <li>The attributesCalculated method is called for each introspected table</li>
+ * <li>The initialized method is called for each introspected table</li>
* <li>The daoXXX methods are called for each introspected table</li>
* <li>The modelXXX methods are called for each introspected table</li>
* <li>The sqlMapXXX methods are called for each introspected table</li>
@@ -88,11 +88,12 @@
void setProperties(Properties properties);
/**
- * This method is called after the IntrospectedTable calculates all
- * the attributes for code generation. Attributes are listed as
- * static Strings with the prefix ATTR_ in IntrospectedTable. Plugins
- * can implement this method to override any of the default attributes,
- * or to add additional attributes for use by other plugin methods.
+ * This method is called just before the getGeneratedXXXFiles methods
+ * are called on the introspected table. Plugins can implement this
+ * method to override any of the default attributes, or change
+ * the results of database introspection, before any code
+ * generation activities occur. Attributes are listed as
+ * static Strings with the prefix ATTR_ in IntrospectedTable.
* <p>
* A good example of overriding an attribute would be the case where
* a user wanted to change the name of one of the generated classes,
@@ -107,7 +108,7 @@
*
* @param introspectedTable
*/
- void attributesCalculated(IntrospectedTable introspectedTable);
+ void initialized(IntrospectedTable introspectedTable);
/**
* This method is called after all the setXXX methods are called, but before any
Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IbatorPluginAdapter.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IbatorPluginAdapter.java?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IbatorPluginAdapter.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IbatorPluginAdapter.java Thu Dec 18 15:11:17 2008
@@ -304,6 +304,6 @@
return true;
}
- public void attributesCalculated(IntrospectedTable introspectedTable) {
+ public void initialized(IntrospectedTable introspectedTable) {
}
}
Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java Thu Dec 18 15:11:17 2008
@@ -39,7 +39,7 @@
/**
* Base class for all code generator implementations.
- * This class provides many of the ibator housekeeping methods needed
+ * This class provides many of the Ibator housekeeping methods needed
* to implement a code generator, with only the actual code generation
* methods left unimplemented.
*
@@ -111,16 +111,14 @@
protected TableConfiguration tableConfiguration;
protected FullyQualifiedTable fullyQualifiedTable;
protected IbatorContext ibatorContext;
- protected IbatorRules rules;
+ private IbatorRules rules;
protected List<IntrospectedColumn> primaryKeyColumns;
protected List<IntrospectedColumn> baseColumns;
protected List<IntrospectedColumn> blobColumns;
- protected boolean hasJDBCDateColumns;
- protected boolean hasJDBCTimeColumns;
/**
* Attributes may be used by plugins to capture table related state
- * between the different plugin calls. Attibutes also are used
+ * between the different plugin calls. Attributes also are used
* to store commonly accessed items by all code generators
*/
protected Map<String, Object> attributes;
@@ -203,7 +201,25 @@
* @return true if the table contains DATE columns
*/
public boolean hasJDBCDateColumns() {
- return hasJDBCDateColumns;
+ boolean rc = false;
+
+ for (IntrospectedColumn introspectedColumn : primaryKeyColumns) {
+ if (introspectedColumn.isJDBCDateColumn()) {
+ rc = true;
+ break;
+ }
+ }
+
+ if (!rc) {
+ for (IntrospectedColumn introspectedColumn : baseColumns) {
+ if (introspectedColumn.isJDBCDateColumn()) {
+ rc = true;
+ break;
+ }
+ }
+ }
+
+ return rc;
}
/**
@@ -213,7 +229,25 @@
* @return true if the table contains TIME columns
*/
public boolean hasJDBCTimeColumns() {
- return hasJDBCTimeColumns;
+ boolean rc = false;
+
+ for (IntrospectedColumn introspectedColumn : primaryKeyColumns) {
+ if (introspectedColumn.isJDBCTimeColumn()) {
+ rc = true;
+ break;
+ }
+ }
+
+ if (!rc) {
+ for (IntrospectedColumn introspectedColumn : baseColumns) {
+ if (introspectedColumn.isJDBCTimeColumn()) {
+ rc = true;
+ break;
+ }
+ }
+ }
+
+ return rc;
}
/**
@@ -407,14 +441,6 @@
baseColumns.add(introspectedColumn);
}
- if (introspectedColumn.isJDBCDateColumn()) {
- hasJDBCDateColumns = true;
- }
-
- if (introspectedColumn.isJDBCTimeColumn()) {
- hasJDBCTimeColumns = true;
- }
-
introspectedColumn.setIntrospectedTable(this);
}
@@ -459,7 +485,7 @@
attributes.put(name, value);
}
- public void calculateAttributes() {
+ public void initialize() {
calculateDAOImplementationPackage();
calculateDAOInterfacePackage();
calculateDAOImplementationType();
@@ -474,7 +500,7 @@
calculateSqlMapPackage();
calculateSqlMapFileName();
- ibatorContext.getPlugins().attributesCalculated(this);
+ ibatorContext.getPlugins().initialized(this);
}
private void calculateDAOImplementationPackage() {
Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/config/IbatorContext.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/config/IbatorContext.java?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/config/IbatorContext.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/config/IbatorContext.java Thu Dec 18 15:11:17 2008
@@ -494,7 +494,7 @@
for (IntrospectedTable introspectedTable : introspectedTables) {
callback.checkCancel();
- introspectedTable.calculateAttributes();
+ introspectedTable.initialize();
generatedJavaFiles.addAll(introspectedTable.getGeneratedJavaFiles());
generatedXmlFiles.addAll(introspectedTable.getGeneratedXmlFiles());
Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/IbatorPluginAggregator.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/IbatorPluginAggregator.java?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/IbatorPluginAggregator.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/IbatorPluginAggregator.java Thu Dec 18 15:11:17 2008
@@ -945,9 +945,9 @@
return rc;
}
- public void attributesCalculated(IntrospectedTable introspectedTable) {
+ public void initialized(IntrospectedTable introspectedTable) {
for (IbatorPlugin plugin : plugins) {
- plugin.attributesCalculated(introspectedTable);
+ plugin.initialized(introspectedTable);
}
}
}
Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/util/messages/messages.properties
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/util/messages/messages.properties?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/util/messages/messages.properties (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/util/messages/messages.properties Thu Dec 18 15:11:17 2008
@@ -64,8 +64,10 @@
Warning.22=Property {0} exists in root class {1}, but does not have a getter. iBATOR will generate the property.
Warning.23=Property {0} exists in root class {1}, but does not have a setter. iBATOR will generate the property.
Warning.24=Plugin {0} in context {1} is invalid and will be ignored.
-Warning.25=The SqlMapConfig plugin requires the targetProject property
-Warning.26=The SqlMapConfig plugin requires the targetPackage property
+Warning.25=SqlMapConfigPlugin requires the targetProject property
+Warning.26=SqlMapConfigPlugin requires the targetPackage property
+Warning.27=RenameExampleClassPlugin requires the searchString property
+Warning.28=RenameExampleClassPlugin requires the replaceString property
Progress.0=Connecting to the Database
Progress.1=Introspecting table {0}
Added: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/plugins/RenameExampleClassPlugin.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/plugins/RenameExampleClassPlugin.java?rev=727852&view=auto
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/plugins/RenameExampleClassPlugin.java (added)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/plugins/RenameExampleClassPlugin.java Thu Dec 18 15:11:17 2008
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2008 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ibatis.ibator.plugins;
+
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.ibatis.ibator.api.IbatorPluginAdapter;
+import org.apache.ibatis.ibator.api.IntrospectedTable;
+import org.apache.ibatis.ibator.api.dom.java.FullyQualifiedJavaType;
+import org.apache.ibatis.ibator.internal.util.StringUtility;
+import org.apache.ibatis.ibator.internal.util.messages.Messages;
+
+/**
+ * This plugin demonstrates overriding the initialized() method
+ * to rename the generated example classes. Instead of xxxExample,
+ * the classes will be named xxxCriteria
+ *
+ * This plugin accepts two properties:
+ * <ul>
+ * <li><tt>searchString</tt> (required) the regular expression of the name search.</li>
+ * <li><tt>replaceString</tt> (required) the replacement String.</li>
+ * </ul>
+ *
+ * For example, to change the name of the generated Example classes from
+ * xxxExample to xxxCriteria, specify the following:
+ *
+ * <dl>
+ * <dt>searchString</dt>
+ * <dd>Example$</dd>
+ * <dt>replaceString</dt>
+ * <dd>Criteria</dd>
+ * </dl>
+ *
+ *
+ * @author Jeff Butler
+ *
+ */
+public class RenameExampleClassPlugin extends IbatorPluginAdapter {
+ private String searchString;
+ private String replaceString;
+ private Pattern pattern;
+
+ /**
+ *
+ */
+ public RenameExampleClassPlugin() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.ibatis.ibator.api.IbatorPlugin#validate(java.util.List)
+ */
+ public boolean validate(List<String> warnings) {
+
+ searchString = properties.getProperty("searchString");
+ replaceString = properties.getProperty("replaceString");
+
+ boolean valid = StringUtility.stringHasValue(searchString)
+ && StringUtility.stringHasValue(replaceString);
+
+ if (valid) {
+ pattern = Pattern.compile(searchString);
+ } else {
+ if (!StringUtility.stringHasValue(searchString)) {
+ warnings.add(Messages.getString("Warning.27"));
+ }
+ if (!StringUtility.stringHasValue(replaceString)) {
+ warnings.add(Messages.getString("Warning.28"));
+ }
+ }
+
+ return valid;
+ }
+
+ @Override
+ public void initialized(IntrospectedTable introspectedTable) {
+ FullyQualifiedJavaType oldType = (FullyQualifiedJavaType)
+ introspectedTable.getAttribute(IntrospectedTable.ATTR_EXAMPLE_TYPE);
+
+ String typeName = oldType.getFullyQualifiedName();
+ Matcher matcher = pattern.matcher(typeName);
+ typeName = matcher.replaceAll(replaceString);
+
+ introspectedTable.setAttribute(IntrospectedTable.ATTR_EXAMPLE_TYPE,
+ new FullyQualifiedJavaType(typeName));
+ }
+}
Modified: ibatis/trunk/java/tools/ibator/core/testJava5/ibatortest/ibatorConfig.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/testJava5/ibatortest/ibatorConfig.xml?rev=727852&r1=727851&r2=727852&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/testJava5/ibatortest/ibatorConfig.xml (original)
+++ ibatis/trunk/java/tools/ibator/core/testJava5/ibatortest/ibatorConfig.xml Thu Dec 18 15:11:17 2008
@@ -261,7 +261,10 @@
<ibatorContext id="miscellaneousTests" targetRuntime="Ibatis2Java5">
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.EqualsHashCodePlugin" />
- <ibatorPlugin type="org.apache.ibatis.ibator.build.test.TestPlugin" />
+ <ibatorPlugin type="org.apache.ibatis.ibator.plugins.RenameExampleClassPlugin" >
+ <property name="searchString" value="Example$"/>
+ <property name="replaceString" value="Criteria"/>
+ </ibatorPlugin>
<commentGenerator>
<property name="suppressDate" value="true"/>