diff --git a/doc/release-log.md b/doc/release-log.md
index d4d59da987ad7127744d0c798b72b61039bc57ac..283caafdb2784e8b432de2b627f19e6fce100251 100644
--- a/doc/release-log.md
+++ b/doc/release-log.md
@@ -16,3 +16,10 @@
- https://gitee.com/opensource4clive/robin/issues/I4Q1YQ
- enhancement:
- https://gitee.com/opensource4clive/robin/issues/I4Q1ZO
+
+## v1.3.1 2022-07-11
+- enhancement:
+ - tables标签removePrefix将支持多个前缀
+ - table标签添加removePrefix支持覆盖父标签的值
+ - https://gitee.com/opensource4clive/robin/issues/I4QXVU
+ - https://gitee.com/opensource4clive/robin/issues/I4VUNH
diff --git a/doc/xml-config.md b/doc/xml-config.md
index a6de3116a139214e24d1908867b95123d6655e58..049bb2c270c2e00575bb443693f286eb7544a119 100644
--- a/doc/xml-config.md
+++ b/doc/xml-config.md
@@ -15,14 +15,15 @@
### jdbcConnection JDBC连接
-| 属性 | 名称 | 是否必填 | 描述 |
-| ------------- | ----------- | -------- | ------------------------------------------------------------ |
-| driverClass | 驱动类 | 是 | jdbc驱动类全路径 |
-| host | 主机地址 | 是 | 数据库主机地址,如非默认端口`3306`需带上端口号 |
-| database | 数据库 | 是 | 数据库名称 |
-| username | 用户名 | 是 | 数据库用户名 |
-| password | 密码 | 是 | 用户名密码 |
+| 属性 | 名称 | 是否必填 | 描述 |
+|---------------|-----------| -------- |--------------------------------------------------------|
+| driverClass | 驱动类 | 是 | jdbc驱动类全路径 |
+| host | 主机地址 | 是 | 数据库主机地址,如非默认端口`3306`需带上端口号 |
+| database | 数据库 | 是 | 数据库名称 |
+| username | 用户名 | 是 | 数据库用户名 |
+| password | 密码 | 是 | 用户名密码 |
| tinyInt1isBit | tinyint转换 | 否 | 默认为true, tinyint(1)类型转Boolean; 为false时,tinyint(1)类型转为Integer |
+| queryString | 查询字符串 | 否 | jdbc查询字符串 |
### javaModelGenerator 实体对象生成器
@@ -78,22 +79,23 @@
### tables 要生成的表集合
-| 属性 | 名称 | 是否必填 | 描述 |
-| ---------------- | ------------ | -------- | ------------------------------------------------------- |
-| all | 是否所有表 | 否 | 为true时,将读取数据库所有表, 将忽略其所有`table`子元素 |
-| ignoreColumns | 忽略的列 | 否 | 所有表需要忽略的列,多个以逗号分隔 |
-| createTimeColumn | 创建时间字段 | 否 | 默认为`created_at` |
-| updateTimeColumn | 更新时间字段 | 否 | 默认为`updated_at` |
-| entityObjectSuffix | 实体后缀 | 否 | 给生成的实体加上统一后缀, 如 `DO` -> UserDO |
-| removePrefix | 移除表前缀 | 否 | 用于生成对象的名字时统一移除前缀
如 表名为`t_user`, `removePrefix=false` -> TUserDO, `removePrefix=true` -> UserDO |
+| 属性 | 名称 | 是否必填 | 描述 |
+| ---------------- | ------------ | -------- |-------------------------------------------------------------------------------------------------------------|
+| all | 是否所有表 | 否 | 为true时,将读取数据库所有表, 将忽略其所有`table`子元素 |
+| ignoreColumns | 忽略的列 | 否 | 所有表需要忽略的列,多个以逗号分隔 |
+| createTimeColumn | 创建时间字段 | 否 | 默认为`created_at` |
+| updateTimeColumn | 更新时间字段 | 否 | 默认为`updated_at` |
+| entityObjectSuffix | 实体后缀 | 否 | 给生成的实体加上统一后缀, 如 `DO` -> UserDO |
+| removePrefix | 移除表前缀 | 否 | 用于生成对象的名字时统一移除前缀(多个以逗号分隔)
如 表名为`t_user`, `removePrefix=null` -> TUserDO, `removePrefix='t_'` -> UserDO |
#### table 要生成的表
-| 属性 | 名称 | 是否必填 | 描述 |
-| ---------------- | ---------- | -------- | ---------------------------------------- |
-| tableName | 表名 | 是 | 表名 |
-| entityObjectName | 实体对象名 | 否 | 如果为空,则以表名大写驼峰作为实体对象名 |
-| ignoreColumns | 忽略的列 | 否 | 此表需要忽略的列,多个以逗号分隔 |
+| 属性 | 名称 | 是否必填 | 描述 |
+| ---------------- | ---------- | -------- |------------------------------------------------|
+| tableName | 表名 | 是 | 表名 |
+| entityObjectName | 实体对象名 | 否 | 如果为空,则以表名大写驼峰作为实体对象名 |
+| ignoreColumns | 忽略的列 | 否 | 此表需要忽略的列,多个以逗号分隔 |
+| removePrefix | 移除表前缀 | 否 | 用于生成对象的名字时统一移除前缀(只支持单个前缀)
优先级比`tables中的高` |
注:
diff --git a/pom.xml b/pom.xml
index 492a0ea3c9c1528e825853136175f3848d379f5f..eca6a2db3a76066b3de4598ca5651fac2c8f2707 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.gitee.opensource4clive
robin
pom
- 1.3.0
+ 1.3.1
robin
Robin is a lightweight framework based on MyBatis that provides adding, deleting, modifying and querying capabilities.
https://gitee.com/opensource4clive/robin
@@ -56,7 +56,7 @@
1.18.12
27.1-jre
3.10
- 2.6
+ 2.11.0
8.0.19
1.2.0
2.7
diff --git a/robin-base/pom.xml b/robin-base/pom.xml
index 54432c7130ecee23fa4d15dcf7ba608d9b6345a7..eb85f9fff47c59f4119f977c95be7eab535af991 100644
--- a/robin-base/pom.xml
+++ b/robin-base/pom.xml
@@ -3,11 +3,11 @@
4.0.0
robin-base
jar
- 1.3.0
+ 1.3.1
com.gitee.opensource4clive
robin
- 1.3.0
+ 1.3.1
diff --git a/robin-generator/dtd/robin-generator.dtd b/robin-generator/dtd/robin-generator.dtd
index 693f594c4f0d989e331f4f58a0191fe70d0b0e73..cb11aa4ae11ac76be948e3a5892721498ff97315 100644
--- a/robin-generator/dtd/robin-generator.dtd
+++ b/robin-generator/dtd/robin-generator.dtd
@@ -16,6 +16,7 @@
username CDATA #REQUIRED
password CDATA #REQUIRED
tinyInt1isBit CDATA #IMPLIED
+ queryString CDATA #IMPLIED
>
@@ -86,4 +87,5 @@
tableName CDATA #REQUIRED
ignoreColumns CDATA #IMPLIED
entityObjectName CDATA #IMPLIED
+ removePrefix CDATA #IMPLIED
>
diff --git a/robin-generator/pom.xml b/robin-generator/pom.xml
index 1fb34cdc90cd647a703a25d05f5f91b104260980..1b3b2792ac8f2ba2e0d7bce669fd5dda60e804a1 100644
--- a/robin-generator/pom.xml
+++ b/robin-generator/pom.xml
@@ -2,13 +2,13 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
robin-generator
- 1.3.0
+ 1.3.1
jar
com.gitee.opensource4clive
robin
- 1.3.0
+ 1.3.1
@@ -41,10 +41,6 @@
commons-io
commons-io
-
- com.google.guava
- guava
-
org.slf4j
slf4j-api
diff --git a/robin-generator/src/main/java/cn/cliveyuan/robin/generator/core/GeneratorChain.java b/robin-generator/src/main/java/cn/cliveyuan/robin/generator/core/GeneratorChain.java
index e819f9b5416bf35de04084cb2dba9b1efb61e9f5..3cfbed7030325faa0eb61d0282bec59082dfc6f7 100644
--- a/robin-generator/src/main/java/cn/cliveyuan/robin/generator/core/GeneratorChain.java
+++ b/robin-generator/src/main/java/cn/cliveyuan/robin/generator/core/GeneratorChain.java
@@ -2,7 +2,6 @@ package cn.cliveyuan.robin.generator.core;
import cn.cliveyuan.robin.generator.util.FreemarkerUtils;
import cn.cliveyuan.robin.generator.util.ReflectUtils;
-import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
@@ -11,6 +10,7 @@ import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -147,7 +147,7 @@ public class GeneratorChain implements Generator {
String mapperSuffix = this.getSuffix(javaClientGenerator, GeneratorEnum.MAPPER_JAVA);
String serviceSuffix = this.getSuffix(serviceGenerator, GeneratorEnum.SERVICE);
// 设置变量
- Map paramMap = Maps.newHashMap();
+ Map paramMap = new HashMap<>();
paramMap.put("entityPackage", javaModelGenerator.getTargetPackage());
paramMap.put("mapperPackage", javaClientGenerator.getTargetPackage());
paramMap.put("mapperImplPackage", javaClientGenerator.getTargetPackage() + GeneratorConst.IMPL_PKG_SUFFIX);
diff --git a/robin-generator/src/main/java/cn/cliveyuan/robin/generator/core/GeneratorContextResolver.java b/robin-generator/src/main/java/cn/cliveyuan/robin/generator/core/GeneratorContextResolver.java
index 4fe92e6ee06acbc4ffc93b7f717098391c966a02..4701ba462dbfd0d66b3c3337e687dd0b00796512 100644
--- a/robin-generator/src/main/java/cn/cliveyuan/robin/generator/core/GeneratorContextResolver.java
+++ b/robin-generator/src/main/java/cn/cliveyuan/robin/generator/core/GeneratorContextResolver.java
@@ -10,7 +10,6 @@ import cn.cliveyuan.robin.generator.db.TableInfo;
import cn.cliveyuan.robin.generator.db.TableIntrospect;
import cn.cliveyuan.robin.generator.util.CollectionUtils;
import cn.cliveyuan.robin.generator.util.GeneratorUtils;
-import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
@@ -86,8 +85,8 @@ public class GeneratorContextResolver {
AssertUtils.notNull(tableInfo, "Table may be not exist: " + table.getTableName());
Entity entity = new Entity();
String tableName = tableInfo.getName();
- if (StringUtils.isNotBlank(table.getRemovePrefix()) && tableName.startsWith(table.getRemovePrefix())) {
- tableName = tableName.replaceFirst(table.getRemovePrefix(), "");
+ if (StringUtils.isNotBlank(table.getRemovePrefix())) {
+ tableName = this.handleTableName(tableName, table.getRemovePrefix());
}
String lowerCamelName = GeneratorUtils.getLowerCamelName(tableName);
String upperCamelName = StringUtils.capitalize(lowerCamelName);
@@ -113,6 +112,16 @@ public class GeneratorContextResolver {
return entity;
}
+ private String handleTableName(String tableName, String removePrefix) {
+ String t = tableName.trim();
+ String[] prefixArr = removePrefix.split(",");
+ for (String prefix : prefixArr) {
+ String p = prefix.trim();
+ if (t.startsWith(p)) return t.replaceFirst(p, "");
+ }
+ return t;
+ }
+
// 匹配id类型
private void matchIdType(List fields, List columns) {
columns.stream().filter(x -> Objects.equals(GeneratorConst.PRIMARY_KEY_COL, x.getName()))
@@ -229,11 +238,13 @@ public class GeneratorContextResolver {
String host = this.getAttributeValueNonBlank(jdbcConnection, "host");
String database = this.getAttributeValueNonBlank(jdbcConnection, "database");
String tinyInt1isBit = this.getAttributeValue(jdbcConnection, "tinyInt1isBit", true);
- String queryString = StringUtils.EMPTY;
+ String queryString = this.getAttributeValue(jdbcConnection, "queryString", true);
+ String q = StringUtils.isNotBlank(queryString) ? "?" + queryString: StringUtils.EMPTY;
+ String connector = StringUtils.isNotBlank(q) ? "&" : "?";
if ("false".equalsIgnoreCase(tinyInt1isBit)) {
- queryString = "?tinyInt1isBit=false";
+ q += connector + "tinyInt1isBit=false";
}
- String connectionURL = String.format("jdbc:mysql://%s/%s%s", host, database, queryString);
+ String connectionURL = String.format("jdbc:mysql://%s/%s%s", host, database, q);
return CodeGeneratorXmlConfig.JdbcConnection.builder()
.driverClass(this.getAttributeValueNonBlank(jdbcConnection, "driverClass"))
.connectionURL(connectionURL)
@@ -243,7 +254,7 @@ public class GeneratorContextResolver {
}
private List getTables(Element rootElement) {
- List tables = Lists.newArrayList();
+ List tables = new ArrayList<>();
Element tableEls = this.getElement(rootElement, "tables");
String all = this.getAttributeValue(tableEls, "all", true);
boolean allTables = "true".equalsIgnoreCase(all);
@@ -290,12 +301,13 @@ public class GeneratorContextResolver {
Element tableEl = (Element) iterator.next();
Set tableIgnoreColumnSet = new HashSet<>(globalIgnoreColumnSet);
tableIgnoreColumnSet.addAll(this.getIgnoreColumnSet(tableEl));
+ String tableRemovePrefix = this.getAttributeValue(tableEl, "removePrefix", true);
tables.add(CodeGeneratorXmlConfig.Table.builder()
.tableName(this.getAttributeValue(tableEl, "tableName"))
.entityObjectName(this.getAttributeValue(tableEl, "entityObjectName", true))
.entityObjectSuffix(entityObjectSuffix)
.ignoreColumns(tableIgnoreColumnSet)
- .removePrefix(removePrefix)
+ .removePrefix(StringUtils.isNotBlank(tableRemovePrefix) ? tableRemovePrefix : removePrefix)
.build());
}
}
diff --git a/robin-generator/src/main/java/cn/cliveyuan/robin/generator/impl/MybatisGenerator.java b/robin-generator/src/main/java/cn/cliveyuan/robin/generator/impl/MybatisGenerator.java
index 0f2911d3483fbad738bab88c4ee5156058b963fa..3aad92b544acecaaebaea4b3bbe173cd8cd42fed 100644
--- a/robin-generator/src/main/java/cn/cliveyuan/robin/generator/impl/MybatisGenerator.java
+++ b/robin-generator/src/main/java/cn/cliveyuan/robin/generator/impl/MybatisGenerator.java
@@ -14,6 +14,9 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class MybatisGenerator implements RobinGenerator {
+ /**
+ * 配置文件路径 (默认值为"/code-generator.xml")
+ */
private final String configFilePath;
@Builder
diff --git a/robin-generator/src/main/java/cn/cliveyuan/robin/generator/util/GeneratorUtils.java b/robin-generator/src/main/java/cn/cliveyuan/robin/generator/util/GeneratorUtils.java
index dd289ce1c8a2359ccf18baf35be9fc1a1a86f00d..a6f5615f12e8eaa7008e6f153df68b5332895878 100644
--- a/robin-generator/src/main/java/cn/cliveyuan/robin/generator/util/GeneratorUtils.java
+++ b/robin-generator/src/main/java/cn/cliveyuan/robin/generator/util/GeneratorUtils.java
@@ -1,6 +1,5 @@
package cn.cliveyuan.robin.generator.util;
-import com.google.common.base.CaseFormat;
import org.apache.commons.lang3.StringUtils;
import java.util.Objects;
@@ -40,7 +39,28 @@ public class GeneratorUtils {
return StringUtils.uncapitalize(str);
}
- private static String lineToHump(String str) {
- return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, str.toUpperCase());
+ public static String lineToHump(String name) {
+ // return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, str.toUpperCase());
+ if (null == name || name.length() == 0) {
+ return null;
+ }
+
+ int length = name.length();
+ StringBuilder sb = new StringBuilder(length);
+ boolean underLineNextChar = false;
+
+ for (int i = 0; i < length; ++i) {
+ char c = name.charAt(i);
+ if (c == '_') {
+ underLineNextChar = true;
+ } else if (underLineNextChar) {
+ sb.append(Character.toUpperCase(c));
+ underLineNextChar = false;
+ } else {
+ sb.append(c);
+ }
+ }
+
+ return sb.toString();
}
}
diff --git a/update_versions.sh b/update_versions.sh
index 47cc9f6e21dfe4ca5763d460bc13b5dc99152e0e..b153002cec34cfce9775f75b521ba5e3767bec6d 100755
--- a/update_versions.sh
+++ b/update_versions.sh
@@ -1,3 +1,3 @@
#!/bin/sh
-mvn versions:set -DprocessAllModules=true -DnewVersion=1.3.0
+mvn versions:set -DprocessAllModules=true -DnewVersion=1.3.1