From ef0704a45e00742b28919e67d015e8418c83109e Mon Sep 17 00:00:00 2001 From: iqudoo Date: Mon, 20 Apr 2026 23:27:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...-mybatis-generator-plugin-1.0-SNAPSHOT.jar | Bin 40366 -> 41037 bytes .../mybatis/TapeMybatisGeneratorPlugin.java | 29 ++++++++++ .../TapeRepositoryGeneratorPlugin.java | 52 ++++++++++++------ .../mybatis/TapeRepoviewGeneratorPlugin.java | 13 ++++- 4 files changed, 75 insertions(+), 19 deletions(-) diff --git a/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar b/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar index c5c8c2f78ea468d404c78d2a149f272c1fb5fc79..dafd3913f8fd83bcbab41e69cd147ffc18afa67a 100644 GIT binary patch delta 32023 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 Rr*u+mHa-k?#{WLR{{n@+ymkNp delta 31406 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 TF2O!WK7l!x0M;Yre>(mz>rjkt diff --git a/src/main/java/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.java b/src/main/java/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.java index f61dd64..6631edf 100644 --- a/src/main/java/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.java +++ b/src/main/java/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.java @@ -104,6 +104,10 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter { FullyQualifiedJavaType integerType = new FullyQualifiedJavaType("java.lang.Integer"); FullyQualifiedJavaType booleanType = new FullyQualifiedJavaType("java.lang.Boolean"); FullyQualifiedJavaType stringType = new FullyQualifiedJavaType("java.lang.String"); + + String domainObjectName = introspectedTable.getFullyQualifiedTable().getDomainObjectName(); + String exampleClassName = domainObjectName + "Example"; + // 添加 startPageNum、maxPageSize、ignorePageSize 字段 Field maxPageSizeField = ElementTools.generateField( "maxPageSize", @@ -356,6 +360,31 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter { ); FormatTools.addMethodWithBestPosition(topLevelClass, getWhereString); + Method cloneExample = ElementTools.generateMethod( + "cloneExample", + JavaVisibility.PUBLIC, + topLevelClass.getType() + ); + cloneExample = ElementTools.generateMethodBody( + cloneExample, + exampleClassName + " newExample = new " + exampleClassName + "();", + "newExample.rows = this.rows;", + "newExample.offset = this.offset;", + "newExample.maxPageSize = this.maxPageSize;", + "newExample.ignorePageSize = this.ignorePageSize;", + "newExample.startPageNum = startPageNum;", + hasBLOBColumns ? "newExample.withBLOBs = withBLOBs;" : "", + "if (this.getOredCriteria() != null && !this.getOredCriteria().isEmpty()) {", + "for (" + exampleClassName + ".Criteria oldCriteria : this.getOredCriteria()) {", + exampleClassName + ".Criteria newCriteria = newExample.or();", + "newCriteria.getCriteria().addAll(oldCriteria.getCriteria());", + "}", + "}", + "newExample.setOrderByClause(this.getOrderByClause());", + "return newExample;" + ); + FormatTools.addMethodWithBestPosition(topLevelClass, cloneExample); + // !!! clear 方法增加 offset 和 rows的清理 boolean hasClear = false; List methodList = topLevelClass.getMethods(); diff --git a/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java b/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java index 2644e5c..ac3d821 100644 --- a/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java +++ b/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java @@ -621,7 +621,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("long useTime = new Date().getTime() - startTime;"); method.addBodyLine("if (useTime > " + getSlowQueryLoggerTime(introspectedTable) + ") {"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] insert " + modelClassName + " long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); method.addBodyLine("}"); @@ -688,7 +688,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("long useTime = new Date().getTime() - startTime;"); method.addBodyLine("if (useTime > " + getSlowQueryLoggerTime(introspectedTable) + ") {"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] batch insert " + modelClassName + " long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); method.addBodyLine("}"); @@ -766,7 +766,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("long useTime = new Date().getTime() - startTime;"); method.addBodyLine("if (useTime > " + getSlowQueryLoggerTime(introspectedTable) + ") {"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] update " + modelClassName + " long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); method.addBodyLine("}"); @@ -791,6 +791,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addException(new FullyQualifiedJavaType("Throwable")); // 方法体 + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(0);"); method.addBodyLine("}"); @@ -845,7 +847,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("exampleString += \"\\n\\t|-> where: \" + example.getWhereString();"); method.addBodyLine("}"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] updateByExampleSelective " + modelClassName + " long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" exampleString +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); @@ -899,7 +901,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("long useTime = new Date().getTime() - startTime;"); method.addBodyLine("if (useTime > " + getSlowQueryLoggerTime(introspectedTable) + ") {"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] deleteById " + modelClassName + " long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); method.addBodyLine("}"); @@ -947,7 +949,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("long useTime = new Date().getTime() - startTime;"); method.addBodyLine("if (useTime > " + getSlowQueryLoggerTime(introspectedTable) + ") {"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] trashById " + modelClassName + " long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); method.addBodyLine("}"); @@ -997,7 +999,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("long useTime = new Date().getTime() - startTime;"); method.addBodyLine("if (useTime > " + getSlowQueryLoggerTime(introspectedTable) + ") {"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] recoverById " + modelClassName + " long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); method.addBodyLine("}"); @@ -1024,6 +1026,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("if (release) {"); method.addBodyLine("return " + mapperFieldName + ".deleteByExample(example);"); method.addBodyLine("}"); + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(1);"); method.addBodyLine("}"); @@ -1046,7 +1050,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("long useTime = new Date().getTime() - startTime;"); method.addBodyLine("if (useTime > " + getSlowQueryLoggerTime(introspectedTable) + ") {"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] deleteAll " + modelClassName + " long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); method.addBodyLine("}"); @@ -1071,6 +1075,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addException(new FullyQualifiedJavaType("Throwable")); // 方法体 + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(0);"); method.addBodyLine("}"); @@ -1094,7 +1100,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("long useTime = new Date().getTime() - startTime;"); method.addBodyLine("if (useTime > " + getSlowQueryLoggerTime(introspectedTable) + ") {"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] trashAll " + modelClassName + " long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); method.addBodyLine("}"); @@ -1119,6 +1125,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addException(new FullyQualifiedJavaType("Throwable")); // 方法体 + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(1);"); method.addBodyLine("}"); @@ -1142,7 +1150,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("long useTime = new Date().getTime() - startTime;"); method.addBodyLine("if (useTime > " + getSlowQueryLoggerTime(introspectedTable) + ") {"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] recoverAll " + modelClassName + " long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); method.addBodyLine("}"); @@ -1167,6 +1175,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); method.addException(new FullyQualifiedJavaType("Throwable")); + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("example.usePage(1, 1);"); method.addBodyLine("List<" + modelClassName + "> dataList = getValidList(example);"); method.addBodyLine("if (dataList != null && !dataList.isEmpty()) {"); @@ -1185,6 +1195,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); method.addException(new FullyQualifiedJavaType("Throwable")); + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("example.usePage(1, 1);"); method.addBodyLine("List<" + modelClassName + "> dataList = getTrashList(example);"); method.addBodyLine("if (dataList != null && !dataList.isEmpty()) {"); @@ -1204,6 +1216,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); method.addException(new FullyQualifiedJavaType("Throwable")); + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(0);"); method.addBodyLine("}"); @@ -1228,7 +1242,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); method.addBodyLine("}"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " valid list primary key long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + findPrimaryKeyTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + findPrimaryKeyTime + \"ms\" +"); method.addBodyLine(" exampleString +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); @@ -1263,7 +1277,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); method.addBodyLine("}"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " valid list long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" exampleString +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); @@ -1281,6 +1295,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); method.addException(new FullyQualifiedJavaType("Throwable")); + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(1);"); method.addBodyLine("}"); @@ -1305,7 +1321,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); method.addBodyLine("}"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " trash list primary key long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + findPrimaryKeyTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + findPrimaryKeyTime + \"ms\" +"); method.addBodyLine(" exampleString +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); @@ -1340,7 +1356,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); method.addBodyLine("}"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " trash list long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" exampleString +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); @@ -1357,6 +1373,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); method.addException(new FullyQualifiedJavaType("Throwable")); + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(0);"); method.addBodyLine("}"); @@ -1372,7 +1390,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();"); method.addBodyLine("}"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " valid count long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" exampleString +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); @@ -1407,6 +1425,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); method.addException(new FullyQualifiedJavaType("Throwable")); + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(1);"); method.addBodyLine("}"); @@ -1422,7 +1442,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();"); method.addBodyLine("}"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " trash count long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" exampleString +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); diff --git a/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java b/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java index 453bb34..39eccdd 100644 --- a/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java +++ b/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java @@ -50,7 +50,7 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { slowQueryLoggerTime = stringConfig("slowQueryLoggerTime", slowQueryLoggerTime); slowQueryLoggerLevel = stringConfig("slowQueryLoggerLevel", slowQueryLoggerLevel); facadeViewRepositoryPackage = stringConfig("facadeViewRepositoryPackage", facadeViewRepositoryPackage); - domainViewRepositoryPackage = stringConfig("facadeViewRepositoryPackage", domainViewRepositoryPackage); + domainViewRepositoryPackage = stringConfig("domainViewRepositoryPackage", domainViewRepositoryPackage); mapperPackage = stringConfig("mapperPackage", mapperPackage); modelPackage = stringConfig("modelPackage", modelPackage); } @@ -280,6 +280,8 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { method.addException(new FullyQualifiedJavaType("Throwable")); // 方法体 + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("example.usePage(1, 1);"); method.addBodyLine("List<" + modelClassName + "> dataList = getList(example);"); method.addBodyLine("if (dataList != null && !dataList.isEmpty()) {"); @@ -301,6 +303,9 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { // 参数名匹配示例(首字母小写) method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); method.addException(new FullyQualifiedJavaType("Throwable")); + + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("List<" + modelClassName + "> result = null;"); method.addBodyLine("long startTime = new Date().getTime();"); if (hasBLOBColumns) { @@ -325,7 +330,7 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); method.addBodyLine("}"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " view list long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" exampleString +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");"); @@ -347,6 +352,8 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { method.addException(new FullyQualifiedJavaType("Throwable")); // 方法体 + method.addBodyLine("// clone new example"); + method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("long startTime = new Date().getTime();"); method.addBodyLine("long count = " + mapperFieldName + ".countByExample(example);"); method.addBodyLine("long useTime = new Date().getTime() - startTime;"); @@ -359,7 +366,7 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();"); method.addBodyLine("}"); method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " view count long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); + method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" exampleString +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(");");