您的位置:首页 > 移动开发 > Objective-C

Mybatis generator 替换/去掉所有table的前缀:columnRenamingRule & domainObjectRenamingRule

2017-12-08 16:22 1591 查看
在用Mybatis generator 生成可以用来访问(多个)表的基础对象,遇到一个问题,就是用columnRenamingRule可以替换所有表元素里字段前缀

<columnRenamingRule searchString="^[^_]+" replaceString=""/>


但是如果想去掉所有表的前缀,比如有多个表:

sys_user
sys_city
sys_order


期望得到的POJO结果是:

User
City
Order


于是搜索资料发现,mybatis generator 1.3.6 已经有了这个功能,

增加了一个新的属性:
domainObjectRenamingRule


In generatreConfig.xml, use like this:

<table tableName="sys%">
<generatedKey column="id" sqlStatement="Mysql"/>
<domainObjectRenamingRule searchString="^sys" replaceString="" />
</table>


参照:

https://github.com/mybatis/generator/issues/275

https://github.com/mybatis/generator/pull/176

查看源码发现已经有了这个属性:

FullyQualifiedTable.java

core/mybatis-generator-core/src/main/java/org/mybatis/generator/api/FullyQualifiedTable.java
@@ -23,6 +23,10 @@
import static org.mybatis.generator.internal.util.StringUtility.stringHasValue;

import org.mybatis.generator.config.Context;
+import org.mybatis.generator.config.DomainObjectRenamingRule;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;

/**
* The Class FullyQualifiedTable.
@@ -43,6 +47,7 @@
private boolean ignoreQualifiersAtRuntime;
private String beginningDelimiter;
private String endingDelimiter;
+    private DomainObjectRenamingRule domainObjectRenamingRule;

/**
* This object is used to hold information related to the table itself, not the columns in the
@@ -82,6 +87,9 @@
* @param delimitIdentifiers
*            if true, then the table identifiers will be delimited at runtime. The delimiter characters are
*            obtained from the Context.
+     * @param domainObjectRenamingRule
+     *            If domainObjectName is not configured, we'll build the domain object named based on the tableName or runtimeTableName.
+     *            And then we use the domain object renameing rule to generate the final domain object name.
* @param context
*            the context
*/
@@ -90,7 +98,8 @@ public FullyQualifiedTable(String introspectedCatalog,
String domainObjectName, String alias,
boolean ignoreQualifiersAtRuntime, String runtimeCatalog,
String runtimeSchema, String runtimeTableName,
-            boolean delimitIdentifiers, Context context) {
+            boolean delimitIdentifiers, DomainObjectRenamingRule domainObjectRenamingRule,
+            Context context) {
super();
this.introspectedCatalog = introspectedCatalog;
this.introspectedSchema = introspectedSchema;
@@ -99,6 +108,7 @@ public FullyQualifiedTable(String introspectedCatalog,
this.runtimeCatalog = runtimeCatalog;
this.runtimeSchema = runtimeSchema;
this.runtimeTableName = runtimeTableName;
+        this.domainObjectRenamingRule = domainObjectRenamingRule;

if (stringHasValue(domainObjectName)) {
int index = domainObjectName.lastIndexOf('.');
@@ -238,11 +248,21 @@ public String getIbatis2SqlMapNamespace() {
public String getDomainObjectName() {
if (stringHasValue(domainObjectName)) {
return domainObjectName;
-        } else if (stringHasValue(runtimeTableName)) {
-            return getCamelCaseString(runtimeTableName, true);
+        }
+        String finalDomainObjectName;
+        if (stringHasValue(runtimeTableName)) {
+            finalDomainObjectName =  getCamelCaseString(runtimeTableName, true);
} else {
-            return getCamelCaseString(introspectedTableName, true);
+            finalDomainObjectName =  getCamelCaseString(introspectedTableName, true);
+        }
+        if(domainObjectRenamingRule != null){
+            Pattern pattern = Pattern.compile(domainObjectRenamingRule.getSearchString());
+            String replaceString = domainObjectRenamingRule.getReplaceString();
+            replaceString = replaceString == null ? "" : replaceString;
+            Matcher matcher = pattern.matcher(finalDomainObjectName);
+            finalDomainObjectName = matcher.replaceAll(replaceString);
}
+        return finalDomainObjectName;
}

/* (non-Javadoc)
@@ -304,7 +324,7 @@ public String getAlias() {
* Calculates a Java package fragment based on the table catalog and schema.
* If qualifiers are ignored, then this method will return an empty string.
*
-     * <p>This method is used for determining the sub package for Java client and
+     * <p>This method is used for determining the sub package for Java client and


…s-generator-core/src/main/java/org/mybatis/generator/config/DomainObjectRenamingRule.java

package org.mybatis.generator.config;
+
+import org.mybatis.generator.api.dom.xml.Attribute;
+import org.mybatis.generator.api.dom.xml.XmlElement;
+
+import java.util.List;
+
+import static org.mybatis.generator.internal.util.StringUtility.stringHasValue;
+import static org.mybatis.generator.internal.ut`这里写代码片`il.messages.Messages.getString;
+
+/**
+ * This class is used to specify a renaming rule for table's domain object name.
+ * If domainObjectName is not configured, we'll build the domain object named
+ * based on the tableName or runtimeTableName. And then we use the domain object
+ * renameing rule to generate the final domain object name.
+ *
+ * For example, if some tables are named:
+ *
+ * <ul>
+ * <li>SYS_USER</li>
+ * <li>SYS_ROLE</li>
+ * <li>SYS_FUNCTIONS</li>
+ * </ul>
+ *
+ * it might be annoying to have the generated domain name all containing the SYS
+ * prefix. This class can be used to remove the prefix by specifying
+ *
+ * <ul>
+ * <li>searchString="^Sys"</li>
+ * <li>replaceString=""</li>
+ * </ul>
+ *
+ * Note that internally, the generator uses the
+ * <code>java.util.regex.Matcher.replaceAll</code> method for this function. See
+ * the documentation of that method for example of the regular expression
+ * language used in Java.
+ *
+ * @author liuzh
+ *
+ */
+public class DomainObjectRenamingRule {
+    private String searchString;
+    private String replaceString;
+
+    public String getReplaceString() {
+        return replaceString;
+    }
+
+    public void setReplaceString(String replaceString) {
+        this.replaceString = replaceString;
+    }
+
+    public String getSearchString() {
+        return searchString;
+    }
+
+    public void setSearchString(String searchString) {
+        this.searchString = searchString;
+    }
+
+    public void validate(List<String> errors, String tableName) {
+        if (!stringHasValue(searchString)) {
+            errors.add(getString("ValidationError.28", tableName)); //$NON-NLS-1$
+        }
+    }
+
+    public XmlElement toXmlElement() {
+        XmlElement xmlElement = new XmlElement("domainRenamingRule"); //$NON-NLS-1$
+        xmlElement.addAttribute(new Attribute("searchString", searchString)); //$NON-NLS-1$
+
+        if (replaceString != null) {
+            xmlElement.addAttribute(new Attribute(
+                    "replaceString", replaceString)); //$NON-NLS-1$
+        }
+
+        return xmlElement;
+    }
+}


.mybatis-generator-core/src/main/java/org/mybatis/generator/config/TableConfiguration.j

private boolean delimitIdentifiers;

+    private DomainObjectRenamingRule domainObjectRenamingRule;
+
private ColumnRenamingRule columnRenamingRule;

private boolean isAllColumnDelimitingEnabled;
@@ -462,6 +464,10 @@ public XmlElement toXmlElement() {
xmlElement.addElement(generatedKey.toXmlElement());
}

+        if (domainObjectRenamingRule != null) {
+            xmlElement.addElement(domainObjectRenamingRule.toXmlElement());
+        }
+
if (columnRenamingRule != null) {
xmlElement.addElement(columnRenamingRule.toXmlElement());
}
@@ -544,6 +550,10 @@ public void validate(List<String> errors, int listPosition) {
}
}

+        if (domainObjectRenamingRule != null) {
+            domainObjectRenamingRule.validate(errors, fqTableName);
+        }
+
if (columnRenamingRule != null) {
columnRenamingRule.validate(errors, fqTableName);
}
@@ -561,6 +571,14 @@ public void validate(List<String> errors, int listPosition) {
}
}

+    public DomainObjectRenamingRule getDomainObjectRenamingRule() {
+        return domainObjectRenamingRule;
+    }
+
+    public void setDomainObjectRenamingRule(DomainObjectRenamingRule domainObjectRenamingRule) {
+        this.domainObjectRenamingRule = domainObjectRenamingRule;
+    }
+
public ColumnRenamingRule getColumnRenamingRule() {
return columnRenamingRule;
}


参照:https://github.com/mybatis/generator/commit/9194d749943d0c6b4372f27bb87e65749d43cb4c

https://github.com/mybatis/generator
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis-generator
相关文章推荐