.*)");
+
/**
* com.mybatisflex.test.entity.Account -> Account
*/
@@ -114,6 +121,40 @@ public class StrUtil {
}
}
+ /**
+ * 解析包名表达式
+ * 将{@code `${entityPackage}`}替换为实际实体包名, 表达式中如果存在一个{@code `.parent`}则缩减包名末尾的一位。
+ * 示例:{@code `entityClass = com.test1.test2`}
+ * 1. 对于{@code `packageStr = ${entityPackage}`}处理结果为 {@code `com.test1.test2`}
+ * 2. 对于{@code `packageStr = ${entityPackage.parent}`}处理结果为 {@code `com.test1`}
+ * 3. 对于{@code `packageStr = ${entityPackage.parent}.customize`}处理结果为 {@code `com.test1.customize`}
+ *
+ */
+ public static String processPackageExpression(String entityClass, String packageStr) {
+ String entityPackage = entityClass.substring(0, entityClass.lastIndexOf("."));
+ Matcher matcher = PACKAGE_REGEX.matcher(packageStr);
+ if (!matcher.find()) {
+ return packageStr;
+ }
+ String expression = matcher.group("expression");
+ expression = expression.substring(2, expression.length() - 1);
+ String subPackage = matcher.group("subPackage");
+ List entityPackageSplit = Arrays.asList(entityPackage.split("\\."));
+ while (expression.contains(".parent")) {
+ if (entityPackageSplit.size() == 0) {
+ throw new RuntimeException("Expression [.parent] has exceeded the maximum limit.");
+ }
+ int index = expression.lastIndexOf(".parent");
+ if (index != -1) {
+ expression = expression.substring(0, index);
+ entityPackageSplit = entityPackageSplit.subList(0, entityPackageSplit.size() - 1);
+ }
+ }
+ expression = expression.replace("entityPackage", String.join(".", entityPackageSplit));
+ return expression + subPackage;
+ }
+
+
public static boolean isGetterMethod(String methodName, String property) {
if (methodName.startsWith("get") && methodName.length() > 3) {
return firstCharToUpperCase(property).concat("()").equals(methodName.substring(3));