From 395b2d957945abe9165d8e2a2b78100a25235321 Mon Sep 17 00:00:00 2001 From: Jeremy Liang Date: Wed, 4 Feb 2026 03:58:15 +0800 Subject: [PATCH] init commit --- README.md | 192 +++++++++++++++--- ...-mybatis-generator-plugin-1.0-SNAPSHOT.jar | Bin 31393 -> 31069 bytes .../TapeRepositoryGeneratorPlugin.java | 78 ++++--- target/apidocs/allclasses-frame.html | 2 +- target/apidocs/allclasses-noframe.html | 2 +- .../mybatis/TapeMybatisGeneratorPlugin.html | 2 +- .../TapeRepositoryGeneratorPlugin.html | 2 +- .../mybatis/TapeRepoviewGeneratorPlugin.html | 2 +- .../abstracts/AbstractWithLimitPlugin.html | 2 +- .../class-use/AbstractWithLimitPlugin.html | 2 +- .../mybatis/abstracts/package-frame.html | 2 +- .../mybatis/abstracts/package-summary.html | 2 +- .../mybatis/abstracts/package-tree.html | 2 +- .../mybatis/abstracts/package-use.html | 2 +- .../class-use/TapeMybatisGeneratorPlugin.html | 2 +- .../TapeRepositoryGeneratorPlugin.html | 2 +- .../TapeRepoviewGeneratorPlugin.html | 2 +- .../hook/ISelectSelectivePluginHook.html | 2 +- .../class-use/ISelectSelectivePluginHook.html | 2 +- .../framework/mybatis/hook/package-frame.html | 2 +- .../mybatis/hook/package-summary.html | 2 +- .../framework/mybatis/hook/package-tree.html | 2 +- .../framework/mybatis/hook/package-use.html | 2 +- .../framework/mybatis/package-frame.html | 2 +- .../framework/mybatis/package-summary.html | 2 +- .../framework/mybatis/package-tree.html | 2 +- .../iqudoo/framework/mybatis/package-use.html | 2 +- .../framework/mybatis/utils/ElementTools.html | 2 +- .../framework/mybatis/utils/FormatTools.html | 2 +- .../mybatis/utils/class-use/ElementTools.html | 2 +- .../mybatis/utils/class-use/FormatTools.html | 2 +- .../mybatis/utils/package-frame.html | 2 +- .../mybatis/utils/package-summary.html | 2 +- .../framework/mybatis/utils/package-tree.html | 2 +- .../framework/mybatis/utils/package-use.html | 2 +- target/apidocs/constant-values.html | 2 +- target/apidocs/deprecated-list.html | 2 +- target/apidocs/help-doc.html | 2 +- target/apidocs/index-all.html | 2 +- target/apidocs/index.html | 2 +- target/apidocs/overview-frame.html | 2 +- target/apidocs/overview-summary.html | 2 +- target/apidocs/overview-tree.html | 2 +- .../TapeRepositoryGeneratorPlugin.class | Bin 29070 -> 28006 bytes target/maven-javadoc-plugin-stale-data.txt | 28 +-- ...-generator-plugin-1.0-SNAPSHOT-javadoc.jar | Bin 82146 -> 82174 bytes ...-generator-plugin-1.0-SNAPSHOT-sources.jar | Bin 19311 -> 19064 bytes ...-mybatis-generator-plugin-1.0-SNAPSHOT.jar | Bin 31393 -> 31069 bytes 48 files changed, 259 insertions(+), 119 deletions(-) diff --git a/README.md b/README.md index 603a0d0..8acd24a 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,80 @@ # tape-mybatis-generator-plugin > MyBatis 代码生成插件 +## 功能特性 -## Uses -in `pom.xml` -``` +本插件为 MyBatis Generator 提供了以下增强功能: + +1. **TapeMybatisGeneratorPlugin** - 扩展 MyBatis Mapper,添加 `selectPrimaryKeyByExample` 方法,支持分页查询主键列表 +2. **TapeRepositoryGeneratorPlugin** - 为非视图表自动生成 Repository 接口和实现类,提供完整的 CRUD 和软删除功能 +3. **TapeRepoviewGeneratorPlugin** - 为视图表自动生成 RepoView 接口和实现类,提供查询功能 +4. **分页支持** - 为 Example 类自动添加分页相关字段和方法(offset、rows、usePage、limit 等) + +## 插件说明 + +### TapeMybatisGeneratorPlugin +扩展 MyBatis Mapper,添加以下功能: +- 在 Mapper 接口中添加 `selectPrimaryKeyByExample` 方法 +- 在 Mapper XML 中生成对应的 SQL 查询语句 +- 支持分页查询(通过 `AbstractWithLimitPlugin` 提供) + +### TapeRepositoryGeneratorPlugin +为非视图表生成 Repository 层代码: +- **接口位置**: `{facadeRepositoryPackage}.I{TableName}Repository` +- **实现类位置**: `{domainRepositoryPackage}.{TableName}RepositoryImpl` +- **视图表过滤**: 根据 `viewKeyWords` 配置自动识别并跳过视图表 + +**生成的方法**: +- `trashById(long id)` - 移动到回收站(单个) +- `trashAll({Example} example)` - 移动到回收站(批量) +- `deleteById(long id, boolean release)` - 删除(单个,支持物理删除) +- `deleteAll({Example} example, boolean release)` - 删除(批量,支持物理删除) +- `recoverById(long id)` - 从回收站恢复(单个) +- `recoverAll({Example} example)` - 从回收站恢复(批量) +- `findNoWhereById(long id)` - 查找(不区分有效/回收站) +- `findValidById(long id)` - 查找有效记录(单个) +- `findTrashById(long id)` - 查找回收站记录(单个) +- `findValidOne({Example} example)` - 查找有效记录(单个,支持条件) +- `findTrashOne({Example} example)` - 查找回收站记录(单个,支持条件) +- `getValidList({Example} example)` - 获取有效记录列表(支持分页) +- `getTrashList({Example} example)` - 获取回收站记录列表(支持分页) +- `countByValid({Example} example)` - 统计有效记录数 +- `countByTrash({Example} example)` - 统计回收站记录数 +- `insert({Model} record)` - 插入记录(自动生成 GUID、设置默认值) +- `update({Model} record)` - 更新记录(支持乐观锁) + +### TapeRepoviewGeneratorPlugin +为视图表生成 RepoView 层代码: +- **接口位置**: `{facadeRepoviewPackage}.I{TableName}Repo` +- **实现类位置**: `{domainRepoviewPackage}.{TableName}RepoImpl` +- **视图表识别**: 仅处理包含 `viewKeyWords` 关键字的表 + +**生成的方法**: +- `findOne({Example} example)` - 查找单条记录 +- `getList({Example} example)` - 获取记录列表(支持分页) +- `count({Example} example)` - 统计记录数 + +### 分页功能 +通过 `AbstractWithLimitPlugin` 为所有 Example 类添加分页支持: + +**添加的字段**: +- `offset` - 偏移量 +- `rows` - 每页数量 +- `minPageNum` - 最小页码(默认 1) +- `defaultPageSize` - 默认每页数量(默认 20) +- `maxPageSize` - 最大每页数量(默认 100) + +**添加的方法**: +- `limit(int rows)` - 设置每页数量 +- `limit(int offset, int rows)` - 设置偏移量和每页数量 +- `usePage(int pageNum, int pageSize)` - 使用页码和每页数量(自动计算 offset) +- `getPageNum()` - 获取当前页码 +- `getPageSize()` - 获取当前每页数量 + +## 使用方法 +### 1. 在 `pom.xml` 中配置插件 + +```xml application @@ -37,9 +107,9 @@ in `pom.xml` com.iqudoo.framework - tape-mybaits-generator-plugin + tape-mybatis-generator-plugin 1.0-SNAPSHOT - ${project.basedir}/src/lib/tape-mybaits-generator-plugin-1.0-SNAPSHOT.jar + ${project.basedir}/src/lib/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar system @@ -47,24 +117,58 @@ in `pom.xml` ``` -in `mybatis.generator.xml` -``` - - - - - - - - - - - +### 2. 在 `mybatis.generator.xml` 中配置插件 + +```xml + + + + + + + + + + + + + + + + + + + + ``` -## Table Template -``` +### 3. 配置参数说明 + +| 参数名 | 说明 | 默认值 | 必需 | +|--------|---------------------|--------------------------------------------------------|------| +| `viewKeyWords` | 视图表关键字(逗号分隔,不区分大小写) | `VIEW_,V_` | 否 | +| `targetProject` | 生成代码的目标项目路径 | `src/main/java` | 否 | +| `modelPackage` | Model 类的包路径 | `com.iqudoo.platform.application.database.model` | 是 | +| `mapperPackage` | Mapper 接口的包路径 | `com.iqudoo.platform.application.database.mapper` | 是 | +| `facadeRepositoryPackage` | Repository 接口的包路径 | `com.iqudoo.platform.application.facade.repository` | 否 | +| `domainRepositoryPackage` | Repository 实现类的包路径 | `com.iqudoo.platform.application.domain.repository` | 否 | +| `facadeRepoviewPackage` | RepoView 接口的包路径 | `com.iqudoo.platform.application.facade.repoview` | 否 | +| `snowflakeUtilClass` | 雪花算法ID生成工具类 | `com.iqudoo.framework.tape.modules.utils.SnowflakeUtil` | 否 | +| `snowflakeUtilGenId` | 雪花算法ID生成方法 | `SnowflakeUtil.nextId()` | 否 | + +**视图表识别规则**: +- 表名包含 `viewKeyWords` 中任一关键字的表将被识别为视图表,大小写不敏感 +- 视图表会生成 RepoView,不会生成 Repository +- 非视图表会生成 Repository,不会生成 RepoView + +## 数据库表结构要求 + +### 标准表结构模板 + +为了使用完整的 Repository 功能(软删除、回收站等),表结构需要包含以下标准字段: + +```sql DROP TABLE IF EXISTS `your_table_name`; CREATE TABLE `your_table_name` ( `guid` bigint(0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'GUID', @@ -80,9 +184,24 @@ CREATE TABLE `your_table_name` ( PRIMARY KEY (`guid`) USING BTREE ) ENGINE = InnoDB COMMENT = '你的表格备注' ROW_FORMAT = Dynamic; ``` -in `mybatis.generator.xml` -``` - + +**必需字段说明**: +- `guid` - 主键,类型为 `bigint UNSIGNED` +- `is_hidden` - 隐藏标志,用于回收站功能 +- `is_delete` - 删除标志,用于软删除功能 +- `delete_token` - 删除令牌,用于标识删除状态 +- `data_version` - 数据版本,用于乐观锁 +- `create_time` - 创建时间,自动设置 +- `update_time` - 更新时间,自动更新 + +### 视图表结构 + +视图表不需要上述标准字段,只需要包含业务字段即可。 + +### 在 `mybatis.generator.xml` 中配置表 + +```xml +
+ + + + + +
``` + +## 注意事项 + +1. **主键要求**:表必须有一个主键字段,且字段名为 `guid`,类型为 `bigint UNSIGNED` +2. **视图表识别**:视图表通过表名中的关键字识别,默认关键字为 `view_` 和 `v_` 不区分大小写 +3. **分页功能**:所有 Example 类都自动包含分页功能,可通过 `usePage()` 方法使用 +4. **乐观锁**:更新操作使用 `data_version` 字段实现乐观锁,更新时需要传入正确的版本号 +5. **软删除**:删除操作默认是软删除(设置 `is_delete` 标志),可通过 `release=true` 参数执行物理删除 +6. **回收站**:通过 `is_hidden` 字段实现回收站功能,`trash` 方法将记录移动到回收站,`recover` 方法恢复记录 +7. **自动字段**:插入记录时,插件会自动设置 `guid`(使用雪花算法)、`is_delete`、`is_hidden`、`delete_token`、`data_version`、`create_time`、`update_time` 等字段 +8. **BLOB 字段支持**:如果表包含 BLOB 字段,插件会自动使用 `selectByExampleWithBLOBs` 和 `updateByExampleWithBLOBs` 方法 +9. **MyBatis Generator 版本**:本插件基于 MyBatis Generator 1.4.1 开发,建议使用 1.4.0 或更高版本 \ No newline at end of file diff --git a/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar b/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar index d079541a60be47d3111459916ff93cffca7ac5e1..4a98c640a6241430f5f1558b2b16ac53a68df7d0 100644 GIT binary patch delta 12054 zcmZXaWl$YW*rt)-?(XjH4hMI4NN@@6I)Mat4g?Q!a19bHSb{qoEVyfMcQ)_tR(-X# zU0r?EJ=OF4nd$DCs;lq@cJ&e#T}u`I9X<>UGBS)1RSNniI3cR~#A4Wg0Q1AK{f7^5 z(*FShX8|Wj)d&y&4&y(fV3WiCM<$$KNH~I2AhXE|zGHwD2FA_>21Xiu0b&NL_>%#v z!6?Ccb2o1ycjGn|j9ly_$mq`R!amY}ibai5v!?L?r5i|tYI+0t=+-_rH5k& zFZ1FLI_l*-IEj3=>e2ilT)eFK-$e+FS!#-UgGZyZWdaL*R<=Jbv_kyV*}E#)ah%XI z<_4XzA)BQQdm#EHJ;4^5=2AgY6M}C^3m-3a6O-8EJS)g%gsE9tQqshf$Yb{a*u`9T z>uMIbN|REi!$xK65ob^9+UUsa>?z|PyiKBdlo$fD>67YxbQnI{>PNrQ@)Z<}<@{ZW z8cM$_LBaOg(zxJ6tQr0J%-I~rCg+lbX{{nb!a6QA0YL@2IcmOnEd#Pj%(*Y4TbLEN z&Qx)aD%By!brn8inEG|7a}nym(E`G(K>eduaUsPKEFp$o`AHp#7M30Blgex%$RVIy zIfkwJomaHH9KD6=jqnhrE$f*m?{(xh?y`HFg3`w}-;B?-$mZ%7N1n=oZTMf`an_gX z!7|BSw7XmRiZ}C`<#AWU51VO;_-r;n5k~1(nBx@Ka19lIJ8Ph~u*dfU&e_EVRCd#w z-tWNOEV<>;0`%0DrA5Ch$4D(GoXZnt)17-R1Q%0#$j_g^Kol21QhX@KJ7Rf z0nD(Y=QBpU^dGj_Nj34le@Z`{q%OomrHAsXZF@P;QtUyju^hghFcR?(7Y*yt7+1C; zDlpN0_#^XuO7NZI=iLe{V7ugI@6nM|{cie#P#=n-*2ycwyE`kwY?>KK4q$SqI^;aJ)re0byYulx!0Nr*J=_On-!axjZ;U>oLwjm zW5nQb{GwdKm~cBoYjO->Ak0%MIunpYg1`)lQKAP-)A0Xl9g-5#wK7ffGw!n?+9Zq~V0VP3B8n}H$N2}#rM9J9CYFl{+5{6>+BN(@ z$|0(*LD;jwGV(A6m~dj~Ctl%rmud#tX}BhWoQo?581}cCmWl+L2w~+#BO*zsRv9{> z4jZGI_Lu7BWR-4d`2B}!aTBTdSuvRyj!=;vNx27d@Pzf23V0&QTB%JL+=axU+Gz-v zWp*P^SObZ>aFj21^qi|6Ca8Dt3V}BesN|DM)gGBrk2wK!;<_|5cy1OpYO%Fg=BPYi zt;)y0Ki6K9E14EI>cHm)6hJemwDf)4F&3DS@M3;zzI_@N1J;^S6dxQVUX<+6rR>@_ zq;uW(YNF?a6pC1R#}t>QN)UV&H3>O}3NgIXlR~Yg71~L+RE#V6b#|Bwv$K6IdJS|r zvYa{E6Kes(fj=_5S_q|2-KAPxo1$V)&@IlG0E_B+)(+8+WzyTbsBTRMW!HQQs9>u+ zq8waDlYYHv29eThrq6Jk$#|>mOiO+IovQaxl<_Y!#pB=q=o}8XH6HAHi=}->aYQT@ zr3FKbQd!_QiY$%1%dSx=z2`;~IS5@!er_^iKi~oGrrbxbuE7LsvKMWeGugcubI{Nb zZ!X=#U+zQ22G|yRWkC)%@BcQdaWARr$M?BJ?N_(dxAZ(bI4N)`N_>IfvqflWkR|+Kvi;* zTFnG-1jc@|JHmX5pc&YLV#4(B*Qy;QVz{(a$? z;;;K#v0D~8A2DqA1&_^&89Q`5EiXDM+d$2=qWWSc&Xa`;+RNApr}#x&vFl~NXni_!3elHJEO zEfo13nA5K$$H+yg8MgCg@JSDEXl~4Q5M2Br70dBYdHpzTNpDJjTH##Po51^i2#d<- znkMASHT-jS6Zzr$a#GA5-Bu&0H&%$%^!mYBPozgPvDT?~3^kdF_Ep6gN%0D!JcJQ= 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 diff --git a/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java b/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java index 8c293bc..35f29bc 100644 --- a/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java +++ b/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java @@ -19,6 +19,8 @@ import java.util.Properties; public class TapeRepositoryGeneratorPlugin extends PluginAdapter { // 固定配置项 + private String snowflakeUtilClass = "com.iqudoo.framework.tape.modules.utils.SnowflakeUtil"; + private String snowflakeUtilGenId = "SnowflakeUtil.nextId()"; private String facadeRepositoryPackage = "com.iqudoo.platform.application.facade.repository"; private String domainRepositoryPackage = "com.iqudoo.platform.application.domain.repository"; private String modelPackage = "com.iqudoo.platform.application.database.model"; @@ -45,6 +47,12 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { public void setProperties(Properties properties) { super.setProperties(properties); // 读取自定义配置 + if (StringUtility.stringHasValue(properties.getProperty("snowflakeUtilClass"))) { + snowflakeUtilClass = properties.getProperty("snowflakeUtilClass"); + } + if (StringUtility.stringHasValue(properties.getProperty("snowflakeUtilGenId"))) { + snowflakeUtilGenId = properties.getProperty("snowflakeUtilGenId"); + } if (StringUtility.stringHasValue(properties.getProperty("facadeRepositoryPackage"))) { facadeRepositoryPackage = properties.getProperty("facadeRepositoryPackage"); } @@ -331,14 +339,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { FullyQualifiedJavaType superInterface = new FullyQualifiedJavaType(facadeRepositoryPackage + "." + interfaceName); implClass.addSuperInterface(superInterface); - // 修复Logger字段:添加static final修饰符 - Field loggerField = new Field("LOGGER", new FullyQualifiedJavaType("org.slf4j.Logger")); - loggerField.setVisibility(JavaVisibility.PRIVATE); - loggerField.setStatic(true); - loggerField.setFinal(true); - loggerField.setInitializationString("Tape.getLogger(" + implClassName + ".class)"); - implClass.addField(loggerField); - String mapperFieldName = lowerFirst(mapperClassName); Field mapperField = new Field(mapperFieldName, new FullyQualifiedJavaType(mapperPackage + "." + mapperClassName)); mapperField.setVisibility(JavaVisibility.PRIVATE); @@ -383,10 +383,10 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine(" return " + mapperFieldName + ".deleteByExample(" + exampleParamName + ");"); method.addBodyLine("}"); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : " + exampleParamName + ".getOredCriteria()) {"); - method.addBodyLine(" criteria.andIsDeleteEqualTo(DatabaseCommonDataIsDeleteEnum.NONE.getValue());"); + method.addBodyLine(" criteria.andIsDeleteEqualTo(0);"); method.addBodyLine("}"); method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();"); - method.addBodyLine(lowerFirst(modelClassName) + ".setIsDelete(DatabaseCommonDataIsDeleteEnum.DELETED.getValue());"); + method.addBodyLine(lowerFirst(modelClassName) + ".setIsDelete(1);"); method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());"); method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", " + exampleParamName + ");"); @@ -404,11 +404,11 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { // 方法体 method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : " + exampleParamName + ".getOredCriteria()) {"); - method.addBodyLine(" criteria.andIsDeleteEqualTo(DatabaseCommonDataIsDeleteEnum.NONE.getValue());"); - method.addBodyLine(" criteria.andIsHiddenEqualTo(DatabaseCommonDataIsHiddenEnum.NONE.getValue());"); + method.addBodyLine(" criteria.andIsDeleteEqualTo(0);"); + method.addBodyLine(" criteria.andIsHiddenEqualTo(0);"); method.addBodyLine("}"); method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();"); - method.addBodyLine(lowerFirst(modelClassName) + ".setIsHidden(DatabaseCommonDataIsHiddenEnum.HIDDEN.getValue());"); + method.addBodyLine(lowerFirst(modelClassName) + ".setIsHidden(1);"); method.addBodyLine(lowerFirst(modelClassName) + ".setDeleteToken(" + lowerFirst(modelClassName) + ".getGuid() + \"\");"); method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());"); method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", " + exampleParamName + ");"); @@ -427,11 +427,11 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { // 方法体 method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : " + exampleParamName + ".getOredCriteria()) {"); - method.addBodyLine(" criteria.andIsDeleteEqualTo(DatabaseCommonDataIsDeleteEnum.NONE.getValue());"); - method.addBodyLine(" criteria.andIsHiddenEqualTo(DatabaseCommonDataIsHiddenEnum.HIDDEN.getValue());"); + method.addBodyLine(" criteria.andIsDeleteEqualTo(0);"); + method.addBodyLine(" criteria.andIsHiddenEqualTo(1);"); method.addBodyLine("}"); method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();"); - method.addBodyLine(lowerFirst(modelClassName) + ".setIsHidden(DatabaseCommonDataIsHiddenEnum.NONE.getValue());"); + method.addBodyLine(lowerFirst(modelClassName) + ".setIsHidden(0);"); method.addBodyLine(lowerFirst(modelClassName) + ".setDeleteToken(\"VALID\");"); method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());"); method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", " + exampleParamName + ");"); @@ -490,16 +490,11 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { } private void addImportPackages(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperClassName, String interfaceName) { - implClass.addImportedType(new FullyQualifiedJavaType("com.iqudoo.framework.tape.Tape")); - implClass.addImportedType(new FullyQualifiedJavaType("com.iqudoo.framework.tape.modules.utils.SnowflakeUtil")); - implClass.addImportedType(new FullyQualifiedJavaType("com.iqudoo.framework.tape.modules.crud.DatabaseCommonDataIsDeleteEnum")); - implClass.addImportedType(new FullyQualifiedJavaType("com.iqudoo.framework.tape.modules.crud.DatabaseCommonDataIsHiddenEnum")); - implClass.addImportedType(new FullyQualifiedJavaType("com.iqudoo.framework.tape.modules.crud.DatabaseErrorConstants")); + implClass.addImportedType(new FullyQualifiedJavaType(snowflakeUtilClass)); implClass.addImportedType(new FullyQualifiedJavaType(mapperPackage + "." + mapperClassName)); implClass.addImportedType(new FullyQualifiedJavaType(modelPackage + "." + modelClassName)); implClass.addImportedType(new FullyQualifiedJavaType(modelPackage + "." + exampleClassName)); implClass.addImportedType(new FullyQualifiedJavaType(facadeRepositoryPackage + "." + interfaceName)); - implClass.addImportedType(new FullyQualifiedJavaType("org.slf4j.Logger")); implClass.addImportedType(new FullyQualifiedJavaType("org.springframework.stereotype.Repository")); implClass.addImportedType(new FullyQualifiedJavaType("javax.annotation.Resource")); implClass.addImportedType(new FullyQualifiedJavaType("java.util.ArrayList")); @@ -566,7 +561,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("if (record.getGuid() != null) {"); method.addBodyLine(" aDo.setGuid(record.getGuid());"); method.addBodyLine("} else {"); - method.addBodyLine(" Long guid = SnowflakeUtil.nextId();"); + method.addBodyLine(" Long guid = " + snowflakeUtilGenId + ";"); method.addBodyLine(" aDo.setGuid(guid);"); method.addBodyLine("}"); @@ -583,8 +578,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("aDo." + setterMethod + "(record." + getterMethod + "());"); } - method.addBodyLine("aDo.setIsDelete(DatabaseCommonDataIsDeleteEnum.NONE.getValue());"); - method.addBodyLine("aDo.setIsHidden(DatabaseCommonDataIsHiddenEnum.NONE.getValue());"); + method.addBodyLine("aDo.setIsDelete(0);"); + method.addBodyLine("aDo.setIsHidden(0);"); method.addBodyLine("aDo.setDeleteToken(\"VALID\");"); method.addBodyLine("aDo.setDataVersion(1);"); method.addBodyLine("aDo.setCreateTime(new Date());"); @@ -595,13 +590,12 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine(" return aDo;"); method.addBodyLine("}"); - method.addBodyLine("// 更新当前数据版本号和GUID"); + method.addBodyLine("// optimistic locking with data version and guid"); method.addBodyLine("record.setGuid(aDo.getGuid());"); method.addBodyLine("record.setDataVersion(aDo.getDataVersion());"); method.addBodyLine("record.setCreateTime(aDo.getCreateTime());"); method.addBodyLine("record.setUpdateTime(aDo.getUpdateTime());"); - method.addBodyLine("LOGGER.error(\"Database write failed, " + modelClassName + ": {}\", aDo);"); - method.addBodyLine("throw DatabaseErrorConstants.DATABASE_WRITE_ERROR;"); + method.addBodyLine("throw new Throwable(\"Database write failed, " + modelClassName + "\");"); implClass.addMethod(method); } @@ -617,7 +611,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine(modelClassName + " aDo = findValidById(record.getGuid());"); method.addBodyLine("if (aDo == null) {"); - method.addBodyLine(" throw DatabaseErrorConstants.DATABASE_RECORD_NOT_FOUND;"); + method.addBodyLine(" throw new Throwable(\"Database record not found, " + modelClassName + " guid:\" + record.getGuid());"); method.addBodyLine("}"); for (IntrospectedColumn column : introspectedTable.getAllColumns()) { @@ -645,7 +639,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine(" .andDataVersionEqualTo(lockDataVersion);"); method.addBodyLine("aDo.setDataVersion(aDo.getDataVersion() + 1);"); method.addBodyLine("aDo.setUpdateTime(new Date());"); - method.addBodyLine("// 更新当前数据版本号"); + method.addBodyLine("// update data version"); method.addBodyLine("record.setDataVersion(aDo.getDataVersion());"); method.addBodyLine("record.setUpdateTime(aDo.getUpdateTime());"); @@ -671,7 +665,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("if (release) {"); method.addBodyLine(" return " + mapperFieldName + ".deleteByPrimaryKey(aDo.getGuid());"); method.addBodyLine("}"); - method.addBodyLine("aDo.setIsDelete(DatabaseCommonDataIsDeleteEnum.DELETED.getValue());"); + method.addBodyLine("aDo.setIsDelete(1);"); method.addBodyLine("aDo.setUpdateTime(new Date());"); method.addBodyLine("return " + mapperFieldName + ".updateByPrimaryKey(aDo);"); @@ -690,7 +684,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("if (aDo == null) {"); method.addBodyLine(" return 0;"); method.addBodyLine("}"); - method.addBodyLine("aDo.setIsHidden(DatabaseCommonDataIsHiddenEnum.HIDDEN.getValue());"); + method.addBodyLine("aDo.setIsHidden(1);"); method.addBodyLine("aDo.setDeleteToken(aDo.getGuid() + \"\");"); method.addBodyLine("aDo.setUpdateTime(new Date());"); method.addBodyLine("return " + mapperFieldName + ".updateByPrimaryKey(aDo);"); @@ -710,10 +704,10 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("if (aDo == null) {"); method.addBodyLine(" return 0;"); method.addBodyLine("}"); - method.addBodyLine("if (aDo.getIsDelete() == DatabaseCommonDataIsDeleteEnum.DELETED.getValue()) {"); + method.addBodyLine("if (aDo.getIsDelete() == 1) {"); method.addBodyLine(" return 0;"); method.addBodyLine("}"); - method.addBodyLine("aDo.setIsHidden(DatabaseCommonDataIsHiddenEnum.NONE.getValue());"); + method.addBodyLine("aDo.setIsHidden(0);"); method.addBodyLine("aDo.setDeleteToken(\"VALID\");"); method.addBodyLine("aDo.setUpdateTime(new Date());"); method.addBodyLine("return " + mapperFieldName + ".updateByPrimaryKey(aDo);"); @@ -769,8 +763,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addException(new FullyQualifiedJavaType("Throwable")); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine(" criteria.andIsDeleteEqualTo(DatabaseCommonDataIsDeleteEnum.NONE.getValue())"); - method.addBodyLine(" .andIsHiddenEqualTo(DatabaseCommonDataIsHiddenEnum.NONE.getValue());"); + method.addBodyLine(" criteria.andIsDeleteEqualTo(0)"); + method.addBodyLine(" .andIsHiddenEqualTo(0);"); method.addBodyLine("}"); method.addBodyLine("if (example.getRows() != null && example.getOffset() != null) {"); method.addBodyLine(" List primaryKeyList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);"); @@ -799,8 +793,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addException(new FullyQualifiedJavaType("Throwable")); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine(" criteria.andIsDeleteEqualTo(DatabaseCommonDataIsDeleteEnum.NONE.getValue())"); - method.addBodyLine(" .andIsHiddenEqualTo(DatabaseCommonDataIsHiddenEnum.HIDDEN.getValue());"); + method.addBodyLine(" criteria.andIsDeleteEqualTo(0)"); + method.addBodyLine(" .andIsHiddenEqualTo(1);"); method.addBodyLine("}"); method.addBodyLine("if (example.getRows() != null && example.getOffset() != null) {"); method.addBodyLine(" List primaryKeyList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);"); @@ -828,8 +822,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addException(new FullyQualifiedJavaType("Throwable")); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine(" criteria.andIsDeleteEqualTo(DatabaseCommonDataIsDeleteEnum.NONE.getValue())"); - method.addBodyLine(" .andIsHiddenEqualTo(DatabaseCommonDataIsHiddenEnum.NONE.getValue());"); + method.addBodyLine(" criteria.andIsDeleteEqualTo(0)"); + method.addBodyLine(" .andIsHiddenEqualTo(0);"); method.addBodyLine("}"); method.addBodyLine("return " + mapperFieldName + ".countByExample(example);"); @@ -845,8 +839,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addException(new FullyQualifiedJavaType("Throwable")); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine(" criteria.andIsDeleteEqualTo(DatabaseCommonDataIsDeleteEnum.NONE.getValue())"); - method.addBodyLine(" .andIsHiddenEqualTo(DatabaseCommonDataIsHiddenEnum.HIDDEN.getValue());"); + method.addBodyLine(" criteria.andIsDeleteEqualTo(0)"); + method.addBodyLine(" .andIsHiddenEqualTo(1);"); method.addBodyLine("}"); method.addBodyLine("return " + mapperFieldName + ".countByExample(example);"); diff --git a/target/apidocs/allclasses-frame.html b/target/apidocs/allclasses-frame.html index e939973..0d1141b 100644 --- a/target/apidocs/allclasses-frame.html +++ b/target/apidocs/allclasses-frame.html @@ -2,7 +2,7 @@ - + 所有类 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/allclasses-noframe.html b/target/apidocs/allclasses-noframe.html index 863dbe6..138674b 100644 --- a/target/apidocs/allclasses-noframe.html +++ b/target/apidocs/allclasses-noframe.html @@ -2,7 +2,7 @@ - + 所有类 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.html b/target/apidocs/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.html index 77c10ed..11ee40d 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.html @@ -2,7 +2,7 @@ - + TapeMybatisGeneratorPlugin (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.html b/target/apidocs/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.html index 21b29a6..fef0a4d 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.html @@ -2,7 +2,7 @@ - + TapeRepositoryGeneratorPlugin (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.html b/target/apidocs/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.html index 3b3784e..4abd874 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.html @@ -2,7 +2,7 @@ - + TapeRepoviewGeneratorPlugin (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/abstracts/AbstractWithLimitPlugin.html b/target/apidocs/com/iqudoo/framework/mybatis/abstracts/AbstractWithLimitPlugin.html index f39ce4d..6d6b833 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/abstracts/AbstractWithLimitPlugin.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/abstracts/AbstractWithLimitPlugin.html @@ -2,7 +2,7 @@ - + AbstractWithLimitPlugin (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/abstracts/class-use/AbstractWithLimitPlugin.html b/target/apidocs/com/iqudoo/framework/mybatis/abstracts/class-use/AbstractWithLimitPlugin.html index 9419614..f338d90 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/abstracts/class-use/AbstractWithLimitPlugin.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/abstracts/class-use/AbstractWithLimitPlugin.html @@ -2,7 +2,7 @@ - + 类 com.iqudoo.framework.mybatis.abstracts.AbstractWithLimitPlugin的使用 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-frame.html b/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-frame.html index 5f17718..016c86c 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-frame.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-frame.html @@ -2,7 +2,7 @@ - + com.iqudoo.framework.mybatis.abstracts (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-summary.html b/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-summary.html index af2b9d7..ddfa08d 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-summary.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-summary.html @@ -2,7 +2,7 @@ - + com.iqudoo.framework.mybatis.abstracts (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-tree.html b/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-tree.html index 72b0559..b48aa6d 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-tree.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-tree.html @@ -2,7 +2,7 @@ - + com.iqudoo.framework.mybatis.abstracts 类分层结构 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-use.html b/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-use.html index ee2afd0..2049c1f 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-use.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/abstracts/package-use.html @@ -2,7 +2,7 @@ - + 程序包 com.iqudoo.framework.mybatis.abstracts的使用 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/class-use/TapeMybatisGeneratorPlugin.html b/target/apidocs/com/iqudoo/framework/mybatis/class-use/TapeMybatisGeneratorPlugin.html index 3c6b20c..00b7cff 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/class-use/TapeMybatisGeneratorPlugin.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/class-use/TapeMybatisGeneratorPlugin.html @@ -2,7 +2,7 @@ - + 类 com.iqudoo.framework.mybatis.TapeMybatisGeneratorPlugin的使用 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/class-use/TapeRepositoryGeneratorPlugin.html b/target/apidocs/com/iqudoo/framework/mybatis/class-use/TapeRepositoryGeneratorPlugin.html index ae62b7e..06ed242 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/class-use/TapeRepositoryGeneratorPlugin.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/class-use/TapeRepositoryGeneratorPlugin.html @@ -2,7 +2,7 @@ - + 类 com.iqudoo.framework.mybatis.TapeRepositoryGeneratorPlugin的使用 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/class-use/TapeRepoviewGeneratorPlugin.html b/target/apidocs/com/iqudoo/framework/mybatis/class-use/TapeRepoviewGeneratorPlugin.html index 954a92f..565ccee 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/class-use/TapeRepoviewGeneratorPlugin.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/class-use/TapeRepoviewGeneratorPlugin.html @@ -2,7 +2,7 @@ - + 类 com.iqudoo.framework.mybatis.TapeRepoviewGeneratorPlugin的使用 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/hook/ISelectSelectivePluginHook.html b/target/apidocs/com/iqudoo/framework/mybatis/hook/ISelectSelectivePluginHook.html index 54602ab..465a06b 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/hook/ISelectSelectivePluginHook.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/hook/ISelectSelectivePluginHook.html @@ -2,7 +2,7 @@ - + ISelectSelectivePluginHook (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/hook/class-use/ISelectSelectivePluginHook.html b/target/apidocs/com/iqudoo/framework/mybatis/hook/class-use/ISelectSelectivePluginHook.html index 12d4882..6a7f8a6 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/hook/class-use/ISelectSelectivePluginHook.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/hook/class-use/ISelectSelectivePluginHook.html @@ -2,7 +2,7 @@ - + 接口 com.iqudoo.framework.mybatis.hook.ISelectSelectivePluginHook的使用 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/hook/package-frame.html b/target/apidocs/com/iqudoo/framework/mybatis/hook/package-frame.html index ed74118..84ba5a5 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/hook/package-frame.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/hook/package-frame.html @@ -2,7 +2,7 @@ - + com.iqudoo.framework.mybatis.hook (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/hook/package-summary.html b/target/apidocs/com/iqudoo/framework/mybatis/hook/package-summary.html index 12200e5..10e841c 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/hook/package-summary.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/hook/package-summary.html @@ -2,7 +2,7 @@ - + com.iqudoo.framework.mybatis.hook (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/hook/package-tree.html b/target/apidocs/com/iqudoo/framework/mybatis/hook/package-tree.html index a8faf98..bd5c3f5 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/hook/package-tree.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/hook/package-tree.html @@ -2,7 +2,7 @@ - + com.iqudoo.framework.mybatis.hook 类分层结构 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/hook/package-use.html b/target/apidocs/com/iqudoo/framework/mybatis/hook/package-use.html index edb8378..d35aa9f 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/hook/package-use.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/hook/package-use.html @@ -2,7 +2,7 @@ - + 程序包 com.iqudoo.framework.mybatis.hook的使用 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/package-frame.html b/target/apidocs/com/iqudoo/framework/mybatis/package-frame.html index af84265..e7e32b0 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/package-frame.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/package-frame.html @@ -2,7 +2,7 @@ - + com.iqudoo.framework.mybatis (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/package-summary.html b/target/apidocs/com/iqudoo/framework/mybatis/package-summary.html index 041ffbc..1b8763a 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/package-summary.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/package-summary.html @@ -2,7 +2,7 @@ - + com.iqudoo.framework.mybatis (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/package-tree.html b/target/apidocs/com/iqudoo/framework/mybatis/package-tree.html index a71701b..2a5dea9 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/package-tree.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/package-tree.html @@ -2,7 +2,7 @@ - + com.iqudoo.framework.mybatis 类分层结构 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/package-use.html b/target/apidocs/com/iqudoo/framework/mybatis/package-use.html index 80da010..4967857 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/package-use.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/package-use.html @@ -2,7 +2,7 @@ - + 程序包 com.iqudoo.framework.mybatis的使用 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/utils/ElementTools.html b/target/apidocs/com/iqudoo/framework/mybatis/utils/ElementTools.html index f6a8707..5febf52 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/utils/ElementTools.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/utils/ElementTools.html @@ -2,7 +2,7 @@ - + ElementTools (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/utils/FormatTools.html b/target/apidocs/com/iqudoo/framework/mybatis/utils/FormatTools.html index 4b3ea1e..2bc5014 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/utils/FormatTools.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/utils/FormatTools.html @@ -2,7 +2,7 @@ - + FormatTools (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/utils/class-use/ElementTools.html b/target/apidocs/com/iqudoo/framework/mybatis/utils/class-use/ElementTools.html index 1c6cf55..989c84f 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/utils/class-use/ElementTools.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/utils/class-use/ElementTools.html @@ -2,7 +2,7 @@ - + 类 com.iqudoo.framework.mybatis.utils.ElementTools的使用 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/utils/class-use/FormatTools.html b/target/apidocs/com/iqudoo/framework/mybatis/utils/class-use/FormatTools.html index 58427e4..6d39bfb 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/utils/class-use/FormatTools.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/utils/class-use/FormatTools.html @@ -2,7 +2,7 @@ - + 类 com.iqudoo.framework.mybatis.utils.FormatTools的使用 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/utils/package-frame.html b/target/apidocs/com/iqudoo/framework/mybatis/utils/package-frame.html index 2de7696..c4d0ace 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/utils/package-frame.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/utils/package-frame.html @@ -2,7 +2,7 @@ - + com.iqudoo.framework.mybatis.utils (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/utils/package-summary.html b/target/apidocs/com/iqudoo/framework/mybatis/utils/package-summary.html index ef1219e..237678f 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/utils/package-summary.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/utils/package-summary.html @@ -2,7 +2,7 @@ - + com.iqudoo.framework.mybatis.utils (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/utils/package-tree.html b/target/apidocs/com/iqudoo/framework/mybatis/utils/package-tree.html index e1bd188..11ced47 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/utils/package-tree.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/utils/package-tree.html @@ -2,7 +2,7 @@ - + com.iqudoo.framework.mybatis.utils 类分层结构 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/com/iqudoo/framework/mybatis/utils/package-use.html b/target/apidocs/com/iqudoo/framework/mybatis/utils/package-use.html index 2a2ef95..e877991 100644 --- a/target/apidocs/com/iqudoo/framework/mybatis/utils/package-use.html +++ b/target/apidocs/com/iqudoo/framework/mybatis/utils/package-use.html @@ -2,7 +2,7 @@ - + 程序包 com.iqudoo.framework.mybatis.utils的使用 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/constant-values.html b/target/apidocs/constant-values.html index 3fdc965..86a1a1e 100644 --- a/target/apidocs/constant-values.html +++ b/target/apidocs/constant-values.html @@ -2,7 +2,7 @@ - + 常量字段值 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/deprecated-list.html b/target/apidocs/deprecated-list.html index 2c89d2f..3d344c5 100644 --- a/target/apidocs/deprecated-list.html +++ b/target/apidocs/deprecated-list.html @@ -2,7 +2,7 @@ - + 已过时的列表 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/help-doc.html b/target/apidocs/help-doc.html index fc92e47..e890aaf 100644 --- a/target/apidocs/help-doc.html +++ b/target/apidocs/help-doc.html @@ -2,7 +2,7 @@ - + API 帮助 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/index-all.html b/target/apidocs/index-all.html index 08b0687..c1be2db 100644 --- a/target/apidocs/index-all.html +++ b/target/apidocs/index-all.html @@ -2,7 +2,7 @@ - + 索引 (tape-mybatis-generator-plugin 1.0-SNAPSHOT API) diff --git a/target/apidocs/index.html b/target/apidocs/index.html index fc20996..a100034 100644 --- a/target/apidocs/index.html +++ b/target/apidocs/index.html @@ -2,7 +2,7 @@ - + tape-mybatis-generator-plugin 1.0-SNAPSHOT API