优化:

乐观锁支持配置,数据字段级日志,慢SQL日志
This commit is contained in:
iqudoo
2026-04-17 03:54:01 +08:00
parent c048da1faf
commit e547f645a6
4 changed files with 236 additions and 86 deletions

View File

@@ -132,8 +132,8 @@
<context id="Mysql" targetRuntime="MyBatis3"> <context id="Mysql" targetRuntime="MyBatis3">
<!-- 配置属性 --> <!-- 配置属性 -->
<property name="targetProject" value="src/main/java"/> <property name="targetProject" value="src/main/java"/>
<property name="modelPackage" value="com.iqudoo.platform.application.database.model"/>
<property name="mapperPackage" value="com.iqudoo.platform.application.database.mapper"/> <property name="mapperPackage" value="com.iqudoo.platform.application.database.mapper"/>
<property name="modelPackage" value="com.iqudoo.platform.application.database.model"/>
<property name="facadeRepositoryPackage" value="com.iqudoo.platform.application.facade.repository"/> <property name="facadeRepositoryPackage" value="com.iqudoo.platform.application.facade.repository"/>
<property name="domainRepositoryPackage" value="com.iqudoo.platform.application.domain.repository"/> <property name="domainRepositoryPackage" value="com.iqudoo.platform.application.domain.repository"/>
<property name="facadeViewRepositoryPackage" value="com.iqudoo.platform.application.facade.repoview"/> <property name="facadeViewRepositoryPackage" value="com.iqudoo.platform.application.facade.repoview"/>
@@ -142,10 +142,10 @@
<property name="guidGeneratorCode" value="SnowflakeUtil.nextId()"/> <property name="guidGeneratorCode" value="SnowflakeUtil.nextId()"/>
<property name="changeLogContextClassPackage" value="com.iqudoo.platform.application.domain.changeLog"/> <property name="changeLogContextClassPackage" value="com.iqudoo.platform.application.domain.changeLog"/>
<property name="changeLogContextClassName" value="ChangeLogContext"/> <property name="changeLogContextClassName" value="ChangeLogContext"/>
<property name="changeLogEnable" value="true"/> <property name="changeLogEnable" value="false"/>
<property name="slowQueryLoggerTime" value="300"/> <property name="slowQueryLoggerTime" value="300"/>
<property name="slowQueryLoggerLevel" value="error"/> <property name="slowQueryLoggerLevel" value="error"/>
<property name="priorityPrimaryKeyOffset" value="100"/> <property name="optimisticLockEnable" value="true"/>
<property name="ignorePageSize" value="10000"/> <property name="ignorePageSize" value="10000"/>
<property name="startPageNum" value="1"/> <property name="startPageNum" value="1"/>
<property name="maxPageSize" value="100"/> <property name="maxPageSize" value="100"/>
@@ -162,21 +162,22 @@
### 3. 配置参数说明 ### 3. 配置参数说明
| 参数名 | 说明 | 默认值 | 必需 | | 参数名 | 说明 | 默认值 | 必需 |
|----------------------------|-------------------------------|---------------------------------------------------------|------| |--------------------------------|-------------------------------|---------------------------------------------------------|------|
| `targetProject` | 生成代码的目标项目路径 | `src/main/java` | 否 | | `targetProject` | 生成代码的目标项目路径 | `src/main/java` | 否 |
| `modelPackage` | Model 类的包路径 | `com.iqudoo.platform.application.database.model` | 是 |
| `mapperPackage` | Mapper 接口的包路径 | `com.iqudoo.platform.application.database.mapper` | 是 | | `mapperPackage` | Mapper 接口的包路径 | `com.iqudoo.platform.application.database.mapper` | 是 |
| `modelPackage` | Model 类的包路径 | `com.iqudoo.platform.application.database.model` | 是 |
| `facadeRepositoryPackage` | Repository 接口的包路径 | `com.iqudoo.platform.application.facade.repository` | 否 | | `facadeRepositoryPackage` | Repository 接口的包路径 | `com.iqudoo.platform.application.facade.repository` | 否 |
| `domainRepositoryPackage` | Repository 实现类的包路径 | `com.iqudoo.platform.application.domain.repository` | 否 | | `domainRepositoryPackage` | Repository 实现类的包路径 | `com.iqudoo.platform.application.domain.repository` | 否 |
| `facadeRepoviewPackage` | RepoView 接口的包路径 | `com.iqudoo.platform.application.facade.repoview` | 否 | | `facadeViewRepositoryPackage` | RepoView 接口的包路径 | `com.iqudoo.platform.application.facade.repoview` | 否 |
| `snowflakeUtilClass` | 雪花算法ID生成工具类 | `com.iqudoo.framework.tape.modules.utils.SnowflakeUtil` | 否 | | `domainViewRepositoryPackage` | RepoView 实现类的包路径 | `com.iqudoo.platform.application.domain.repoview` | 否 |
| `snowflakeUtilGenId` | 雪花算法ID生成方法 | `SnowflakeUtil.nextId()` | 否 | | `guidGeneratorClass` | GUID生成工具类 | `com.iqudoo.framework.tape.modules.utils.SnowflakeUtil` | 否 |
| `guidGeneratorCode` | GUID生成方法 | `SnowflakeUtil.nextId()` | 否 |
| `changeLogContextClassPackage` | 变更日志上下文包路径 | `com.iqudoo.platform.application.domain.changeLog` | 否 | | `changeLogContextClassPackage` | 变更日志上下文包路径 | `com.iqudoo.platform.application.domain.changeLog` | 否 |
| `changeLogContextClassName` | 变更日志上下文类 | `ChangeLogContext` | 否 | | `changeLogContextClassName` | 变更日志上下文类 | `ChangeLogContext` | 否 |
| `changeLogEnable` | 变更日志监听开关 | `false` | 否 | | `changeLogEnable` | 变更日志监听开关 | `false` | 否 |
| `slowQueryLoggerTime` | 慢查询日志时间阈值 | `300` | 否 | | `slowQueryLoggerTime` | 慢查询日志时间阈值 | `300` | 否 |
| `slowQueryLoggerLevel` | 慢查询日志类型errorwarndebuginfo | `error` | 否 | | `slowQueryLoggerLevel` | 慢查询日志类型errorwarndebuginfo | `error` | 否 |
| `priorityPrimaryKeyOffset` | 优先查询主键偏移阈值 | `0` | 否 | | `optimisticLockEnable` | 乐观锁开关 | `true` | 否 |
| `ignorePageSize` | 忽略分页阈值 | `10000` | 否 | | `ignorePageSize` | 忽略分页阈值 | `10000` | 否 |
| `startPageNum` | 分页开始页码 | `1` | 否 | | `startPageNum` | 分页开始页码 | `1` | 否 |
| `maxPageSize` | 最大每页数量 | `100` | 否 | | `maxPageSize` | 最大每页数量 | `100` | 否 |

View File

@@ -19,7 +19,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
// 固定配置项 // 固定配置项
private String slowQueryLoggerTime = "300"; private String slowQueryLoggerTime = "300";
private String slowQueryLoggerLevel = "error"; private String slowQueryLoggerLevel = "error";
private String priorityPrimaryKeyOffset = "0";
private String facadeRepositoryPackage = "com.iqudoo.platform.application.facade.repository"; private String facadeRepositoryPackage = "com.iqudoo.platform.application.facade.repository";
private String domainRepositoryPackage = "com.iqudoo.platform.application.domain.repository"; private String domainRepositoryPackage = "com.iqudoo.platform.application.domain.repository";
private String guidGeneratorClass = "com.iqudoo.framework.tape.modules.utils.SnowflakeUtil"; private String guidGeneratorClass = "com.iqudoo.framework.tape.modules.utils.SnowflakeUtil";
@@ -27,6 +26,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
private String changeLogContextClassPackage = "com.iqudoo.platform.application.domain.changeLog"; private String changeLogContextClassPackage = "com.iqudoo.platform.application.domain.changeLog";
private String changeLogContextClassName = "ChangeLogContext"; private String changeLogContextClassName = "ChangeLogContext";
private String changeLogEnable = "false"; private String changeLogEnable = "false";
private String optimisticLockEnable = "true";
private String modelPackage = "com.iqudoo.platform.application.database.model"; private String modelPackage = "com.iqudoo.platform.application.database.model";
private String mapperPackage = "com.iqudoo.platform.application.database.mapper"; private String mapperPackage = "com.iqudoo.platform.application.database.mapper";
private String targetProject = "src/main/java"; private String targetProject = "src/main/java";
@@ -48,12 +48,12 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
} }
private void resolveConfiguration() { private void resolveConfiguration() {
targetProject = stringConfig("targetProject", targetProject);
slowQueryLoggerTime = stringConfig("slowQueryLoggerTime", slowQueryLoggerTime); slowQueryLoggerTime = stringConfig("slowQueryLoggerTime", slowQueryLoggerTime);
slowQueryLoggerLevel = stringConfig("slowQueryLoggerLevel", slowQueryLoggerLevel); slowQueryLoggerLevel = stringConfig("slowQueryLoggerLevel", slowQueryLoggerLevel);
if (!UtilTools.inArray(new String[]{"error", "warn", "debug", "info"}, slowQueryLoggerLevel)) { if (!UtilTools.inArray(new String[]{"error", "warn", "debug", "info"}, slowQueryLoggerLevel)) {
slowQueryLoggerLevel = "error"; slowQueryLoggerLevel = "error";
} }
priorityPrimaryKeyOffset = stringConfig("priorityPrimaryKeyOffset", priorityPrimaryKeyOffset);
guidGeneratorClass = stringConfig("guidGeneratorClass", guidGeneratorClass); guidGeneratorClass = stringConfig("guidGeneratorClass", guidGeneratorClass);
guidGeneratorCode = stringConfig("guidGeneratorCode", guidGeneratorCode); guidGeneratorCode = stringConfig("guidGeneratorCode", guidGeneratorCode);
facadeRepositoryPackage = stringConfig("facadeRepositoryPackage", facadeRepositoryPackage); facadeRepositoryPackage = stringConfig("facadeRepositoryPackage", facadeRepositoryPackage);
@@ -61,9 +61,9 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
changeLogContextClassPackage = stringConfig("changeLogContextClassPackage", changeLogContextClassPackage); changeLogContextClassPackage = stringConfig("changeLogContextClassPackage", changeLogContextClassPackage);
changeLogContextClassName = stringConfig("changeLogContextClassName", changeLogContextClassName); changeLogContextClassName = stringConfig("changeLogContextClassName", changeLogContextClassName);
changeLogEnable = stringConfig("changeLogEnable", changeLogEnable); changeLogEnable = stringConfig("changeLogEnable", changeLogEnable);
modelPackage = stringConfig("modelPackage", modelPackage); optimisticLockEnable = stringConfig("optimisticLockEnable", optimisticLockEnable);
mapperPackage = stringConfig("mapperPackage", mapperPackage); mapperPackage = stringConfig("mapperPackage", mapperPackage);
targetProject = stringConfig("targetProject", targetProject); modelPackage = stringConfig("modelPackage", modelPackage);
} }
private boolean isChangeLogEnable() { private boolean isChangeLogEnable() {
@@ -77,6 +77,17 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
return false; return false;
} }
private boolean isOptimisticLockEnable() {
try {
boolean b = Boolean.parseBoolean(optimisticLockEnable);
if (b) {
return true;
}
} catch (Throwable ignored) {
}
return false;
}
private String stringConfig(String key, String defaultValue) { private String stringConfig(String key, String defaultValue) {
String v = properties.getProperty(key); String v = properties.getProperty(key);
if (StringUtility.stringHasValue(v)) { if (StringUtility.stringHasValue(v)) {
@@ -397,11 +408,11 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
generateBatchInsertMethod(implClass, modelClassName, mapperFieldName, introspectedTable); generateBatchInsertMethod(implClass, modelClassName, mapperFieldName, introspectedTable);
generateUpdateMethod(implClass, modelClassName, exampleClassName, mapperFieldName, introspectedTable, hasBLOBColumns); generateUpdateMethod(implClass, modelClassName, exampleClassName, mapperFieldName, introspectedTable, hasBLOBColumns);
generateUpdateByExampleSelectiveMethod(implClass, modelClassName, exampleClassName, mapperFieldName, introspectedTable, hasBLOBColumns); generateUpdateByExampleSelectiveMethod(implClass, modelClassName, exampleClassName, mapperFieldName, introspectedTable, hasBLOBColumns);
generateDeleteByIdMethod(implClass, modelClassName, mapperFieldName); generateDeleteByIdMethod(implClass, modelClassName, exampleClassName, mapperFieldName);
generateDeleteAllMethod(implClass, modelClassName, exampleClassName, mapperFieldName); generateDeleteAllMethod(implClass, modelClassName, exampleClassName, mapperFieldName);
generateTrashByIdMethod(implClass, modelClassName, mapperFieldName); generateTrashByIdMethod(implClass, modelClassName, exampleClassName, mapperFieldName);
generateTrashAllMethod(implClass, modelClassName, exampleClassName, mapperFieldName); generateTrashAllMethod(implClass, modelClassName, exampleClassName, mapperFieldName);
generateRecoverByIdMethod(implClass, modelClassName, mapperFieldName); generateRecoverByIdMethod(implClass, modelClassName, exampleClassName, mapperFieldName);
generateRecoverAllMethod(implClass, modelClassName, exampleClassName, mapperFieldName); generateRecoverAllMethod(implClass, modelClassName, exampleClassName, mapperFieldName);
generateFindValidOneMethod(implClass, modelClassName, exampleClassName); generateFindValidOneMethod(implClass, modelClassName, exampleClassName);
generateFindTrashOneMethod(implClass, modelClassName, exampleClassName); generateFindTrashOneMethod(implClass, modelClassName, exampleClassName);
@@ -587,7 +598,15 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("aDo.setCreateTime(new Date());"); method.addBodyLine("aDo.setCreateTime(new Date());");
method.addBodyLine("aDo.setUpdateTime(new Date());"); method.addBodyLine("aDo.setUpdateTime(new Date());");
method.addBodyLine("long startTime = new Date().getTime();");
method.addBodyLine("int count = " + mapperFieldName + ".insert(aDo);"); method.addBodyLine("int count = " + mapperFieldName + ".insert(aDo);");
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] insert " + modelClassName + " long time\" +");
method.addBodyLine(" \"\\n\\t|-> use time\" + useTime + \"ms\" +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
method.addBodyLine(");");
method.addBodyLine("}");
method.addBodyLine("if (count > 0) {"); method.addBodyLine("if (count > 0) {");
method.addBodyLine("// optimistic locking with data version and guid"); method.addBodyLine("// optimistic locking with data version and guid");
method.addBodyLine("record.setGuid(aDo.getGuid());"); method.addBodyLine("record.setGuid(aDo.getGuid());");
@@ -646,7 +665,15 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("batch.add(aDo);"); method.addBodyLine("batch.add(aDo);");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("long startTime = new Date().getTime();");
method.addBodyLine("int count = " + mapperFieldName + ".batchInsert(batch);"); method.addBodyLine("int count = " + mapperFieldName + ".batchInsert(batch);");
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] batch insert " + modelClassName + " long time\" +");
method.addBodyLine(" \"\\n\\t|-> use time\" + useTime + \"ms\" +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
method.addBodyLine(");");
method.addBodyLine("}");
method.addBodyLine("if (count == batch.size()) {"); method.addBodyLine("if (count == batch.size()) {");
if (isChangeLogEnable()) { if (isChangeLogEnable()) {
method.addBodyLine("for (" + modelClassName + " aDo : batch) {"); method.addBodyLine("for (" + modelClassName + " aDo : batch) {");
@@ -697,6 +724,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("}"); method.addBodyLine("}");
} }
method.addBodyLine(exampleClassName + " updateWhere = new " + exampleClassName + "();"); method.addBodyLine(exampleClassName + " updateWhere = new " + exampleClassName + "();");
if (isOptimisticLockEnable()) {
method.addBodyLine("Integer lockDataVersion = record.getDataVersion();"); method.addBodyLine("Integer lockDataVersion = record.getDataVersion();");
method.addBodyLine("if (lockDataVersion == null) {"); method.addBodyLine("if (lockDataVersion == null) {");
method.addBodyLine("lockDataVersion = aDo.getDataVersion();"); method.addBodyLine("lockDataVersion = aDo.getDataVersion();");
@@ -704,22 +732,33 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("updateWhere.createCriteria()"); method.addBodyLine("updateWhere.createCriteria()");
method.addBodyLine(" .andGuidEqualTo(aDo.getGuid())"); method.addBodyLine(" .andGuidEqualTo(aDo.getGuid())");
method.addBodyLine(" .andDataVersionEqualTo(lockDataVersion);"); method.addBodyLine(" .andDataVersionEqualTo(lockDataVersion);");
} else {
method.addBodyLine("updateWhere.createCriteria()");
method.addBodyLine(" .andGuidEqualTo(aDo.getGuid());");
}
method.addBodyLine("aDo.setDataVersion(aDo.getDataVersion() + 1);"); method.addBodyLine("aDo.setDataVersion(aDo.getDataVersion() + 1);");
method.addBodyLine("aDo.setUpdateTime(new Date());"); method.addBodyLine("aDo.setUpdateTime(new Date());");
method.addBodyLine("// update data version"); method.addBodyLine("// update data version");
method.addBodyLine("record.setDataVersion(aDo.getDataVersion());"); method.addBodyLine("record.setDataVersion(aDo.getDataVersion());");
method.addBodyLine("record.setUpdateTime(aDo.getUpdateTime());"); method.addBodyLine("record.setUpdateTime(aDo.getUpdateTime());");
method.addBodyLine("long startTime = new Date().getTime();");
String updateMethod = hasBLOBColumns ? "updateByExampleWithBLOBs" : "updateByExample"; String updateMethod = hasBLOBColumns ? "updateByExampleWithBLOBs" : "updateByExample";
if (isChangeLogEnable()) {
method.addBodyLine("int update = " + mapperFieldName + "." + updateMethod + "(aDo, updateWhere);"); method.addBodyLine("int update = " + mapperFieldName + "." + updateMethod + "(aDo, updateWhere);");
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] update " + modelClassName + " long time\" +");
method.addBodyLine(" \"\\n\\t|-> use time\" + useTime + \"ms\" +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
method.addBodyLine(");");
method.addBodyLine("}");
if (isChangeLogEnable()) {
method.addBodyLine("if (update > 0 && !changeDiff.isEmpty()) {"); method.addBodyLine("if (update > 0 && !changeDiff.isEmpty()) {");
method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\","); method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\",");
method.addBodyLine(" \"update\", aDo.getGuid(), changeDiff);"); method.addBodyLine(" \"update\", aDo.getGuid(), changeDiff);");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("return update;");
} else {
method.addBodyLine("return " + mapperFieldName + "." + updateMethod + "(aDo, updateWhere);");
} }
method.addBodyLine("return update;");
implClass.addMethod(method); implClass.addMethod(method);
} }
@@ -744,10 +783,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("return 0;"); method.addBodyLine("return 0;");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("example = new " + exampleClassName + "();"); method.addBodyLine("example = new " + exampleClassName + "();");
method.addBodyLine("example.createCriteria()"); method.addBodyLine("example.createCriteria().andGuidIn(guidList);");
method.addBodyLine(" .andIsDeleteEqualTo(0)");
method.addBodyLine(" .andIsHiddenEqualTo(0)");
method.addBodyLine(" .andGuidIn(guidList);");
if (isChangeLogEnable()) { if (isChangeLogEnable()) {
String selectByExampleMethod = hasBLOBColumns ? "selectByExampleWithBLOBs" : "selectByExample"; String selectByExampleMethod = hasBLOBColumns ? "selectByExampleWithBLOBs" : "selectByExample";
method.addBodyLine("List<" + modelClassName + "> recordList"); method.addBodyLine("List<" + modelClassName + "> recordList");
@@ -771,16 +807,32 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("diffGroup.put(aDo.getGuid(), changeDiff);"); method.addBodyLine("diffGroup.put(aDo.getGuid(), changeDiff);");
method.addBodyLine("}"); method.addBodyLine("}");
} }
method.addBodyLine("// reset data version to 100, with optimistic locking"); if (isOptimisticLockEnable()) {
method.addBodyLine("record.setDataVersion(100);"); method.addBodyLine("// reset data version, with optimistic locking");
method.addBodyLine("record.setDataVersion((int) (new Date().getTime() % 1000));");
}
method.addBodyLine("// It is not supported to directly modify the following columns"); method.addBodyLine("// It is not supported to directly modify the following columns");
method.addBodyLine("record.setUpdateTime(new Date());"); method.addBodyLine("record.setUpdateTime(new Date());");
method.addBodyLine("record.setIsHidden(null);"); method.addBodyLine("record.setIsHidden(null);");
method.addBodyLine("record.setIsDelete(null);"); method.addBodyLine("record.setIsDelete(null);");
method.addBodyLine("record.setDeleteToken(null);"); method.addBodyLine("record.setDeleteToken(null);");
method.addBodyLine("record.setCreateTime(null);"); method.addBodyLine("record.setCreateTime(null);");
if (isChangeLogEnable()) {
method.addBodyLine("long startTime = new Date().getTime();");
method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(record, example);"); method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(record, example);");
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
method.addBodyLine("String exampleString = \"\";");
method.addBodyLine("if (example.getWhereString() != null) {");
method.addBodyLine("exampleString += \"\\n\\t|-> where: \" + example.getWhereString();");
method.addBodyLine("}");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] updateByExampleSelective " + modelClassName + " long time\" +");
method.addBodyLine(" \"\\n\\t|-> use time\" + useTime + \"ms\" +");
method.addBodyLine(" exampleString +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
method.addBodyLine(");");
method.addBodyLine("}");
if (isChangeLogEnable()) {
method.addBodyLine("if (update > 0) {"); method.addBodyLine("if (update > 0) {");
method.addBodyLine("for (Map.Entry<Long, Map<String, Object[]>> diffEntry : diffGroup.entrySet()) {"); method.addBodyLine("for (Map.Entry<Long, Map<String, Object[]>> diffEntry : diffGroup.entrySet()) {");
method.addBodyLine("if (diffEntry.getValue() != null && !diffEntry.getValue().isEmpty()) {"); method.addBodyLine("if (diffEntry.getValue() != null && !diffEntry.getValue().isEmpty()) {");
@@ -789,14 +841,12 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("return update;");
} else {
method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(record, example);");
} }
method.addBodyLine("return update;");
implClass.addMethod(method); implClass.addMethod(method);
} }
private void generateDeleteByIdMethod(TopLevelClass implClass, String modelClassName, String mapperFieldName) { private void generateDeleteByIdMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName) {
Method method = new Method("deleteById"); Method method = new Method("deleteById");
method.addAnnotation("@Override"); method.addAnnotation("@Override");
method.setVisibility(JavaVisibility.PUBLIC); method.setVisibility(JavaVisibility.PUBLIC);
@@ -811,9 +861,30 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (release) {"); method.addBodyLine("if (release) {");
method.addBodyLine("return " + mapperFieldName + ".deleteByPrimaryKey(aDo.getGuid());"); method.addBodyLine("return " + mapperFieldName + ".deleteByPrimaryKey(aDo.getGuid());");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine(exampleClassName + " updateWhere");
method.addBodyLine(" = new " + exampleClassName + "();");
method.addBodyLine("Integer lockDataVersion = aDo.getDataVersion();");
if (isOptimisticLockEnable()) {
method.addBodyLine("updateWhere.createCriteria()");
method.addBodyLine(" .andGuidEqualTo(aDo.getGuid())");
method.addBodyLine(" .andDataVersionEqualTo(lockDataVersion);");
} else {
method.addBodyLine("updateWhere.createCriteria()");
method.addBodyLine(" .andGuidEqualTo(aDo.getGuid());");
}
method.addBodyLine("aDo.setDataVersion(aDo.getDataVersion() + 1);");
method.addBodyLine("aDo.setIsDelete(1);"); method.addBodyLine("aDo.setIsDelete(1);");
method.addBodyLine("aDo.setUpdateTime(new Date());"); method.addBodyLine("aDo.setUpdateTime(new Date());");
method.addBodyLine("int update = " + mapperFieldName + ".updateByPrimaryKey(aDo);");
method.addBodyLine("long startTime = new Date().getTime();");
method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(aDo, updateWhere);");
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] deleteById " + modelClassName + " long time\" +");
method.addBodyLine(" \"\\n\\t|-> use time\" + useTime + \"ms\" +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
method.addBodyLine(");");
method.addBodyLine("}");
if (isChangeLogEnable()) { if (isChangeLogEnable()) {
method.addBodyLine("if (update > 0) {"); method.addBodyLine("if (update > 0) {");
method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\","); method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\",");
@@ -824,7 +895,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
implClass.addMethod(method); implClass.addMethod(method);
} }
private void generateTrashByIdMethod(TopLevelClass implClass, String modelClassName, String mapperFieldName) { private void generateTrashByIdMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName) {
Method method = new Method("trashById"); Method method = new Method("trashById");
method.addAnnotation("@Override"); method.addAnnotation("@Override");
method.setVisibility(JavaVisibility.PUBLIC); method.setVisibility(JavaVisibility.PUBLIC);
@@ -836,23 +907,43 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (aDo == null) {"); method.addBodyLine("if (aDo == null) {");
method.addBodyLine("return 0;"); method.addBodyLine("return 0;");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine(exampleClassName + " updateWhere");
method.addBodyLine(" = new " + exampleClassName + "();");
method.addBodyLine("Integer lockDataVersion = aDo.getDataVersion();");
if (isOptimisticLockEnable()) {
method.addBodyLine("updateWhere.createCriteria()");
method.addBodyLine(" .andGuidEqualTo(aDo.getGuid())");
method.addBodyLine(" .andDataVersionEqualTo(lockDataVersion);");
} else {
method.addBodyLine("updateWhere.createCriteria()");
method.addBodyLine(" .andGuidEqualTo(aDo.getGuid());");
}
method.addBodyLine("aDo.setDataVersion(aDo.getDataVersion() + 1);");
method.addBodyLine("aDo.setIsHidden(1);"); method.addBodyLine("aDo.setIsHidden(1);");
method.addBodyLine("aDo.setDeleteToken(aDo.getGuid() + \"\");"); method.addBodyLine("aDo.setDeleteToken(aDo.getGuid() + \"\");");
method.addBodyLine("aDo.setUpdateTime(new Date());"); method.addBodyLine("aDo.setUpdateTime(new Date());");
method.addBodyLine("long startTime = new Date().getTime();");
method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(aDo, updateWhere);");
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] trashById " + modelClassName + " long time\" +");
method.addBodyLine(" \"\\n\\t|-> use time\" + useTime + \"ms\" +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
method.addBodyLine(");");
method.addBodyLine("}");
if (isChangeLogEnable()) { if (isChangeLogEnable()) {
method.addBodyLine("int update = " + mapperFieldName + ".updateByPrimaryKey(aDo);");
method.addBodyLine("if (update > 0) {"); method.addBodyLine("if (update > 0) {");
method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\","); method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\",");
method.addBodyLine(" \"trashById\", aDo.getGuid(), new HashMap<>());"); method.addBodyLine(" \"trashById\", aDo.getGuid(), new HashMap<>());");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("return update;");
} else {
method.addBodyLine("return " + mapperFieldName + ".updateByPrimaryKey(aDo);");
} }
method.addBodyLine("return update;");
implClass.addMethod(method); implClass.addMethod(method);
} }
private void generateRecoverByIdMethod(TopLevelClass implClass, String modelClassName, String mapperFieldName) { private void generateRecoverByIdMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName) {
Method method = new Method("recoverById"); Method method = new Method("recoverById");
method.addAnnotation("@Override"); method.addAnnotation("@Override");
method.setVisibility(JavaVisibility.PUBLIC); method.setVisibility(JavaVisibility.PUBLIC);
@@ -867,19 +958,38 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (aDo.getIsDelete() == 1) {"); method.addBodyLine("if (aDo.getIsDelete() == 1) {");
method.addBodyLine("return 0;"); method.addBodyLine("return 0;");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine(exampleClassName + " updateWhere");
method.addBodyLine(" = new " + exampleClassName + "();");
method.addBodyLine("Integer lockDataVersion = aDo.getDataVersion();");
if (isOptimisticLockEnable()) {
method.addBodyLine("updateWhere.createCriteria()");
method.addBodyLine(" .andGuidEqualTo(aDo.getGuid())");
method.addBodyLine(" .andDataVersionEqualTo(lockDataVersion);");
} else {
method.addBodyLine("updateWhere.createCriteria()");
method.addBodyLine(" .andGuidEqualTo(aDo.getGuid());");
}
method.addBodyLine("aDo.setDataVersion(aDo.getDataVersion() + 1);");
method.addBodyLine("aDo.setIsHidden(0);"); method.addBodyLine("aDo.setIsHidden(0);");
method.addBodyLine("aDo.setDeleteToken(\"VALID\");"); method.addBodyLine("aDo.setDeleteToken(\"VALID\");");
method.addBodyLine("aDo.setUpdateTime(new Date());"); method.addBodyLine("aDo.setUpdateTime(new Date());");
method.addBodyLine("long startTime = new Date().getTime();");
method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(aDo, updateWhere);");
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] recoverById " + modelClassName + " long time\" +");
method.addBodyLine(" \"\\n\\t|-> use time\" + useTime + \"ms\" +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
method.addBodyLine(");");
method.addBodyLine("}");
if (isChangeLogEnable()) { if (isChangeLogEnable()) {
method.addBodyLine("int update = " + mapperFieldName + ".updateByPrimaryKey(aDo);");
method.addBodyLine("if (update > 0) {"); method.addBodyLine("if (update > 0) {");
method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\","); method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\",");
method.addBodyLine(" \"recoverById\", aDo.getGuid(), new HashMap<>());"); method.addBodyLine(" \"recoverById\", aDo.getGuid(), new HashMap<>());");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("return update;");
} else {
method.addBodyLine("return " + mapperFieldName + ".updateByPrimaryKey(aDo);");
} }
method.addBodyLine("return update;");
implClass.addMethod(method); implClass.addMethod(method);
} }
@@ -903,21 +1013,34 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (guidList.isEmpty()) {"); method.addBodyLine("if (guidList.isEmpty()) {");
method.addBodyLine("return 0;"); method.addBodyLine("return 0;");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("example = new " + exampleClassName + "();");
method.addBodyLine("example.createCriteria().andGuidIn(guidList);");
method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();"); method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();");
if (isOptimisticLockEnable()) {
method.addBodyLine("// reset data version, with optimistic locking");
method.addBodyLine(lowerFirst(modelClassName) + ".setDataVersion((int) (new Date().getTime() % 1000));");
}
method.addBodyLine(lowerFirst(modelClassName) + ".setIsDelete(1);"); method.addBodyLine(lowerFirst(modelClassName) + ".setIsDelete(1);");
method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());"); method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());");
if (isChangeLogEnable()) {
method.addBodyLine("long startTime = new Date().getTime();");
method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);"); method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);");
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] deleteAll " + modelClassName + " long time\" +");
method.addBodyLine(" \"\\n\\t|-> use time\" + useTime + \"ms\" +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
method.addBodyLine(");");
method.addBodyLine("}");
if (isChangeLogEnable()) {
method.addBodyLine("if (update > 0) {"); method.addBodyLine("if (update > 0) {");
method.addBodyLine("for (Long guid : guidList) {"); method.addBodyLine("for (Long guid : guidList) {");
method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\","); method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\",");
method.addBodyLine(" \"deleteAll\", guid, new HashMap<>());"); method.addBodyLine(" \"deleteAll\", guid, new HashMap<>());");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("return update;");
} else {
method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);");
} }
method.addBodyLine("return update;");
implClass.addMethod(method); implClass.addMethod(method);
} }
@@ -937,22 +1060,35 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (guidList.isEmpty()) {"); method.addBodyLine("if (guidList.isEmpty()) {");
method.addBodyLine("return 0;"); method.addBodyLine("return 0;");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("example = new " + exampleClassName + "();");
method.addBodyLine("example.createCriteria().andGuidIn(guidList);");
method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();"); method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();");
if (isOptimisticLockEnable()) {
method.addBodyLine("// reset data version, with optimistic locking");
method.addBodyLine(lowerFirst(modelClassName) + ".setDataVersion((int) (new Date().getTime() % 1000));");
}
method.addBodyLine(lowerFirst(modelClassName) + ".setIsHidden(1);"); method.addBodyLine(lowerFirst(modelClassName) + ".setIsHidden(1);");
method.addBodyLine(lowerFirst(modelClassName) + ".setDeleteToken(" + guidGeneratorCode + " + \"\");"); method.addBodyLine(lowerFirst(modelClassName) + ".setDeleteToken(" + guidGeneratorCode + " + \"\");");
method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());"); method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());");
if (isChangeLogEnable()) {
method.addBodyLine("long startTime = new Date().getTime();");
method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);"); method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);");
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] trashAll " + modelClassName + " long time\" +");
method.addBodyLine(" \"\\n\\t|-> use time\" + useTime + \"ms\" +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
method.addBodyLine(");");
method.addBodyLine("}");
if (isChangeLogEnable()) {
method.addBodyLine("if (update > 0) {"); method.addBodyLine("if (update > 0) {");
method.addBodyLine("for (Long guid : guidList) {"); method.addBodyLine("for (Long guid : guidList) {");
method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\","); method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\",");
method.addBodyLine(" \"trashAll\", guid, new HashMap<>());"); method.addBodyLine(" \"trashAll\", guid, new HashMap<>());");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("return update;");
} else {
method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);");
} }
method.addBodyLine("return update;");
implClass.addMethod(method); implClass.addMethod(method);
} }
@@ -972,22 +1108,35 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (guidList.isEmpty()) {"); method.addBodyLine("if (guidList.isEmpty()) {");
method.addBodyLine("return 0;"); method.addBodyLine("return 0;");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("example = new " + exampleClassName + "();");
method.addBodyLine("example.createCriteria().andGuidIn(guidList);");
method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();"); method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();");
if (isOptimisticLockEnable()) {
method.addBodyLine("// reset data version, with optimistic locking");
method.addBodyLine(lowerFirst(modelClassName) + ".setDataVersion((int) (new Date().getTime() % 1000));");
}
method.addBodyLine(lowerFirst(modelClassName) + ".setIsHidden(0);"); method.addBodyLine(lowerFirst(modelClassName) + ".setIsHidden(0);");
method.addBodyLine(lowerFirst(modelClassName) + ".setDeleteToken(\"VALID\");"); method.addBodyLine(lowerFirst(modelClassName) + ".setDeleteToken(\"VALID\");");
method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());"); method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());");
if (isChangeLogEnable()) {
method.addBodyLine("long startTime = new Date().getTime();");
method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);"); method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);");
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] recoverAll " + modelClassName + " long time\" +");
method.addBodyLine(" \"\\n\\t|-> use time\" + useTime + \"ms\" +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
method.addBodyLine(");");
method.addBodyLine("}");
if (isChangeLogEnable()) {
method.addBodyLine("if (update > 0) {"); method.addBodyLine("if (update > 0) {");
method.addBodyLine("for (Long guid : guidList) {"); method.addBodyLine("for (Long guid : guidList) {");
method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\","); method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\",");
method.addBodyLine(" \"recoverAll\", guid, new HashMap<>());"); method.addBodyLine(" \"recoverAll\", guid, new HashMap<>());");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("return update;");
} else {
method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);");
} }
method.addBodyLine("return update;");
implClass.addMethod(method); implClass.addMethod(method);
} }
@@ -1043,7 +1192,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("List<" + modelClassName + "> result = null;"); method.addBodyLine("List<" + modelClassName + "> result = null;");
method.addBodyLine("long startTime = new Date().getTime();"); method.addBodyLine("long startTime = new Date().getTime();");
if (hasBLOBColumns) { if (hasBLOBColumns) {
method.addBodyLine("if (example.getRows() != null && example.getOffset() != null && example.getOffset() > " + priorityPrimaryKeyOffset + ") {"); method.addBodyLine("if (example.getRows() != null && example.getOffset() != null) {");
method.addBodyLine("List<Long> primaryKeyList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);"); method.addBodyLine("List<Long> primaryKeyList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);");
method.addBodyLine("if (primaryKeyList == null || primaryKeyList.isEmpty()) {"); method.addBodyLine("if (primaryKeyList == null || primaryKeyList.isEmpty()) {");
method.addBodyLine("return new ArrayList<>();"); method.addBodyLine("return new ArrayList<>();");
@@ -1060,7 +1209,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (example.getLimitString() != null) {"); method.addBodyLine("if (example.getLimitString() != null) {");
method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " valid list primary key use long time\" +"); method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[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(" exampleString +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
@@ -1095,7 +1244,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (example.getLimitString() != null) {"); method.addBodyLine("if (example.getLimitString() != null) {");
method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " valid list use long time\" +"); method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[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(" exampleString +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
@@ -1120,7 +1269,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("List<" + modelClassName + "> result = null;"); method.addBodyLine("List<" + modelClassName + "> result = null;");
method.addBodyLine("long startTime = new Date().getTime();"); method.addBodyLine("long startTime = new Date().getTime();");
if (hasBLOBColumns) { if (hasBLOBColumns) {
method.addBodyLine("if (example.getRows() != null && example.getOffset() != null && example.getOffset() > " + priorityPrimaryKeyOffset + ") {"); method.addBodyLine("if (example.getRows() != null && example.getOffset() != null) {");
method.addBodyLine("List<Long> primaryKeyList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);"); method.addBodyLine("List<Long> primaryKeyList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);");
method.addBodyLine("if (primaryKeyList == null || primaryKeyList.isEmpty()) {"); method.addBodyLine("if (primaryKeyList == null || primaryKeyList.isEmpty()) {");
method.addBodyLine("return new ArrayList<>();"); method.addBodyLine("return new ArrayList<>();");
@@ -1137,7 +1286,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (example.getLimitString() != null) {"); method.addBodyLine("if (example.getLimitString() != null) {");
method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " trash list primary key use long time\" +"); method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[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(" exampleString +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
@@ -1172,7 +1321,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (example.getLimitString() != null) {"); method.addBodyLine("if (example.getLimitString() != null) {");
method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " trash list use long time\" +"); method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[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(" exampleString +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
@@ -1204,7 +1353,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (example.getOrderByClause() != null) {"); method.addBodyLine("if (example.getOrderByClause() != null) {");
method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();"); method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " valid count use long time\" +"); method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[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(" exampleString +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
@@ -1254,7 +1403,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (example.getOrderByClause() != null) {"); method.addBodyLine("if (example.getOrderByClause() != null) {");
method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();"); method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " trash count use long time\" +"); method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[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(" exampleString +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(" \"\\n\\t|-----------------------------------\"");

View File

@@ -45,6 +45,7 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
} }
private void resolveConfiguration() { private void resolveConfiguration() {
targetProject = stringConfig("targetProject", targetProject);
slowQueryLoggerTime = stringConfig("slowQueryLoggerTime", slowQueryLoggerTime); slowQueryLoggerTime = stringConfig("slowQueryLoggerTime", slowQueryLoggerTime);
slowQueryLoggerLevel = stringConfig("slowQueryLoggerLevel", slowQueryLoggerLevel); slowQueryLoggerLevel = stringConfig("slowQueryLoggerLevel", slowQueryLoggerLevel);
if (!UtilTools.inArray(new String[]{"error", "warn", "debug", "info"}, slowQueryLoggerLevel)) { if (!UtilTools.inArray(new String[]{"error", "warn", "debug", "info"}, slowQueryLoggerLevel)) {
@@ -52,9 +53,8 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
} }
facadeViewRepositoryPackage = stringConfig("facadeRepoviewPackage", facadeViewRepositoryPackage); facadeViewRepositoryPackage = stringConfig("facadeRepoviewPackage", facadeViewRepositoryPackage);
domainViewRepositoryPackage = stringConfig("domainRepoviewPackage", domainViewRepositoryPackage); domainViewRepositoryPackage = stringConfig("domainRepoviewPackage", domainViewRepositoryPackage);
modelPackage = stringConfig("modelPackage", modelPackage);
mapperPackage = stringConfig("mapperPackage", mapperPackage); mapperPackage = stringConfig("mapperPackage", mapperPackage);
targetProject = stringConfig("targetProject", targetProject); modelPackage = stringConfig("modelPackage", modelPackage);
} }
private String stringConfig(String key, String defaultValue) { private String stringConfig(String key, String defaultValue) {
@@ -296,7 +296,7 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (example.getOrderByClause() != null) {"); method.addBodyLine("if (example.getOrderByClause() != null) {");
method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();"); method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " view list use long time\" +"); method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[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(" exampleString +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
@@ -330,7 +330,7 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
method.addBodyLine("if (example.getOrderByClause() != null) {"); method.addBodyLine("if (example.getOrderByClause() != null) {");
method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();"); method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();");
method.addBodyLine("}"); method.addBodyLine("}");
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " view count use long time\" +"); method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[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(" exampleString +");
method.addBodyLine(" \"\\n\\t|-----------------------------------\""); method.addBodyLine(" \"\\n\\t|-----------------------------------\"");