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