mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 17:18:24 +08:00
docs: APT设置增加表达式用法说明
This commit is contained in:
parent
515e08da4b
commit
360e4b5091
@ -26,12 +26,43 @@ MyBatis-Flex 使用了 APT(Annotation Processing Tool)技术,在项目编
|
||||
| processor.mapper.annotation | 开启 @Mapper 注解 | true/false | false |
|
||||
| processor.mapper.baseClass | 自定义 Mapper 的父类 | 全路径类名 | com.mybatisflex.core.BaseMapper |
|
||||
| processor.mapper.package | 自定义 Mapper 生成的包名 | 合法的包名 | ${entityPackage}.mapper |
|
||||
| processor.tableDef.package | 生成辅助类的包名 | 合法的包名 | ${entityPackage}.table |
|
||||
| processor.tableDef.propertiesNameStyle | 生成辅助类的字段风格 | upperCase, lowerCase<br />upperCamelCase, lowerCamelCase | upperCase |
|
||||
| processor.tableDef.instanceSuffix | 生成的表对应的变量后缀 | string | 空字符串 |
|
||||
| processor.tableDef.classSuffix | 生成的 TableDef 类的后缀 | string | TableDef |
|
||||
| processor.tableDef.ignoreEntitySuffixes | 过滤 Entity 后缀 | string | - |
|
||||
|
||||
对于示例中的包名表达式,说明如下:
|
||||
|
||||
1. 仅支持以下配置项使用表达式
|
||||
```text
|
||||
processor.allInTables.package
|
||||
processor.mapper.package
|
||||
processor.tableDef.package
|
||||
```
|
||||
2. `${entityPackage}`: 表示 Entity 类所在的包名
|
||||
3. `${entityPackage.parent}`: 表示 Entity 类所在的上一级包名
|
||||
4. `parent` 参数的数量没有限制,但如果超出了可能的层级,则会导致异常
|
||||
|
||||
**示例配置:**
|
||||
|
||||
假设 Example 类的全限定类名为 `com.mybatisflex.entity.Example`
|
||||
|
||||
配置内容如下:
|
||||
|
||||
```properties
|
||||
processor.allInTables.package=${entityPackage}.table
|
||||
processor.mapper.package=${entityPackage.parent}.mapper
|
||||
processor.tableDef.package=${entityPackage.parent.parent}.table
|
||||
```
|
||||
|
||||
生成类的全限定类名如下:
|
||||
|
||||
```text
|
||||
com.mybatisflex.entity.table.Tables
|
||||
com.mybatisflex.mapper.ExampleMapper
|
||||
com.table.ExampleTableDef
|
||||
```
|
||||
|
||||
## APT 代码生成路径
|
||||
|
||||
@ -47,7 +78,6 @@ processor.genPath = your-path
|
||||
|
||||
genPath 可以是绝对路径,也可以是相对路径,如果填写的是相对路径,那么则是相对 Maven 根模块的目录。
|
||||
|
||||
|
||||
## APT 生成的 Tables 类名和包名
|
||||
|
||||
默认情况下, APT 生成的类名为 "Tables",而包名为 entity 的包添加上 ".table",假设 Account.java
|
||||
@ -89,6 +119,7 @@ public class AccountTableDef extends TableDef {
|
||||
#upperCase, lowerCase, upperCamelCase, lowerCamelCase
|
||||
processor.tableDef.propertiesNameStyle=upperCase
|
||||
```
|
||||
|
||||
风格支持 4 种配置,默认(未配置时)为 upperCase,支持的配置分别为:
|
||||
|
||||
- upperCase:大写 + 下划线,例如:USER_NAME
|
||||
@ -96,9 +127,8 @@ processor.tableDef.propertiesNameStyle = upperCase
|
||||
- upperCamelCase:首字母大写的驼峰命名,例如:UserName
|
||||
- lowerCamelCase:首字母小写的驼峰命名,例如:userName
|
||||
|
||||
|
||||
|
||||
## APT 过滤 Entity 后缀
|
||||
|
||||
在某些情况下,Entity 类可能会有某些通用的后缀,比如 `AccountModel` 或者 `AccountDto` 等,我们希望生成的代码,
|
||||
不包含 `Model` `Dto` 等后缀,可以添加如下的配置:
|
||||
|
||||
@ -106,7 +136,6 @@ processor.tableDef.propertiesNameStyle = upperCase
|
||||
processor.tableDef.ignoreEntitySuffixes=Model, Dto
|
||||
```
|
||||
|
||||
|
||||
## APT 开启 Mapper 生成
|
||||
|
||||
从 v1.1.9 开始, APT 的 Mapper 功能是关闭的,若需要开启 Mapper 的自动生成功能,需要添加以下配置。
|
||||
@ -117,7 +146,6 @@ processor.mapper.generateEnable = true
|
||||
|
||||
以上的配置,会开启整个项目的 APT 生成,若我们想关闭某一个 Entity 的 APT 生成,那么可以通过配置注解 `@Table(mapperGenerateEnable = false)` 进行关闭。
|
||||
|
||||
|
||||
## APT 生成的 Mapper 包名
|
||||
|
||||
默认情况下, APT 生成的 Mapper 类名为 "***Mapper",而包名为 entity 的包添加上 ".mapper",假设 Account.java
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
|
||||
<artifactId>mybatis-flex-processor</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.9.3-fix3</version>
|
||||
|
||||
|
||||
<properties>
|
||||
|
||||
@ -128,25 +128,26 @@ public class StrUtil {
|
||||
* </p>
|
||||
*/
|
||||
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 entityClass;
|
||||
return entityPackage;
|
||||
}
|
||||
String expression = matcher.group("expression");
|
||||
expression = expression.substring(2, expression.length() - 1);
|
||||
String subPackage = matcher.group("subPackage");
|
||||
List<String> entityPackage = Arrays.asList(entityClass.split("\\."));
|
||||
List<String> entityPackageSplit = Arrays.asList(entityPackage.split("\\."));
|
||||
while (expression.contains(".parent")) {
|
||||
if (entityPackage.size() == 0) {
|
||||
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);
|
||||
entityPackage = entityPackage.subList(0, entityPackage.size() - 1);
|
||||
entityPackageSplit = entityPackageSplit.subList(0, entityPackageSplit.size() - 1);
|
||||
}
|
||||
}
|
||||
expression = expression.replace("entityPackage", String.join(".", entityPackage));
|
||||
expression = expression.replace("entityPackage", String.join(".", entityPackageSplit));
|
||||
return expression + subPackage;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user