diff --git a/README.md b/README.md index f2f8772..4df68da 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,7 @@ + diff --git a/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar b/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar index 4f1d0af..bc31d8f 100644 Binary files a/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar and b/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar differ diff --git a/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java b/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java index a615782..b8ea4bf 100644 --- a/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java +++ b/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java @@ -27,6 +27,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { private String changeLogContextClassPackage = "com.iqudoo.platform.application.domain.changeLog"; private String changeLogContextClassName = "ChangeLogContext"; private String changeLogEnable = "false"; + private String optimisticLockEnable = "false"; private String modelPackage = "com.iqudoo.platform.application.database.model"; private String mapperPackage = "com.iqudoo.platform.application.database.mapper"; private String targetProject = "src/main/java"; @@ -61,11 +62,23 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { changeLogContextClassPackage = stringConfig("changeLogContextClassPackage", changeLogContextClassPackage); changeLogContextClassName = stringConfig("changeLogContextClassName", changeLogContextClassName); changeLogEnable = stringConfig("changeLogEnable", changeLogEnable); + optimisticLockEnable = stringConfig("optimisticLockEnable", optimisticLockEnable); modelPackage = stringConfig("modelPackage", modelPackage); mapperPackage = stringConfig("mapperPackage", mapperPackage); targetProject = stringConfig("targetProject", targetProject); } + private boolean isOptimisticLockEnable() { + try { + boolean b = Boolean.parseBoolean(optimisticLockEnable); + if (b) { + return true; + } + } catch (Throwable ignored) { + } + return false; + } + private boolean isChangeLogEnable() { try { boolean b = Boolean.parseBoolean(changeLogEnable); @@ -153,30 +166,13 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { Interface repositoryInterface = new Interface(facadeRepositoryPackage + "." + interfaceName); repositoryInterface.setVisibility(JavaVisibility.PUBLIC); - // 添加必要的导入(仅保留model和example,移除ModelDataRepository) + // 添加必要的导入 repositoryInterface.addImportedType(new FullyQualifiedJavaType(modelPackage + "." + modelClassName)); repositoryInterface.addImportedType(new FullyQualifiedJavaType(modelPackage + "." + exampleClassName)); repositoryInterface.addImportedType(new FullyQualifiedJavaType("java.util.List")); + repositoryInterface.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.session.RowBounds")); - // 1. trashById - Method trashByIdMethod = new Method("trashById"); - trashByIdMethod.setVisibility(JavaVisibility.PUBLIC); - trashByIdMethod.setReturnType(new FullyQualifiedJavaType("int")); - trashByIdMethod.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "id")); - trashByIdMethod.addException(new FullyQualifiedJavaType("Throwable")); - trashByIdMethod.setAbstract(true); - repositoryInterface.addMethod(trashByIdMethod); - - // 2. trashAll - Method trashAllMethod = new Method("trashAll"); - trashAllMethod.setVisibility(JavaVisibility.PUBLIC); - trashAllMethod.setReturnType(new FullyQualifiedJavaType("int")); - trashAllMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - trashAllMethod.addException(new FullyQualifiedJavaType("Throwable")); - trashAllMethod.setAbstract(true); - repositoryInterface.addMethod(trashAllMethod); - - // 3. deleteById + // 1. deleteById Method deleteByIdMethod = new Method("deleteById"); deleteByIdMethod.setVisibility(JavaVisibility.PUBLIC); deleteByIdMethod.setReturnType(new FullyQualifiedJavaType("int")); @@ -186,7 +182,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { deleteByIdMethod.setAbstract(true); repositoryInterface.addMethod(deleteByIdMethod); - // 4. deleteAll + // 2. deleteAll Method deleteAllMethod = new Method("deleteAll"); deleteAllMethod.setVisibility(JavaVisibility.PUBLIC); deleteAllMethod.setReturnType(new FullyQualifiedJavaType("int")); @@ -196,124 +192,53 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { deleteAllMethod.setAbstract(true); repositoryInterface.addMethod(deleteAllMethod); - // 5. recoverById - Method recoverByIdMethod = new Method("recoverById"); - recoverByIdMethod.setVisibility(JavaVisibility.PUBLIC); - recoverByIdMethod.setReturnType(new FullyQualifiedJavaType("int")); - recoverByIdMethod.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "id")); - recoverByIdMethod.addException(new FullyQualifiedJavaType("Throwable")); - recoverByIdMethod.setAbstract(true); - repositoryInterface.addMethod(recoverByIdMethod); + // 3. findById + Method findByIdMethod = new Method("findById"); + findByIdMethod.setVisibility(JavaVisibility.PUBLIC); + findByIdMethod.setReturnType(new FullyQualifiedJavaType(modelClassName)); + findByIdMethod.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "id")); + findByIdMethod.addException(new FullyQualifiedJavaType("Throwable")); + findByIdMethod.setAbstract(true); + repositoryInterface.addMethod(findByIdMethod); - // 6. recoverAll - Method recoverAllMethod = new Method("recoverAll"); - recoverAllMethod.setVisibility(JavaVisibility.PUBLIC); - recoverAllMethod.setReturnType(new FullyQualifiedJavaType("int")); - recoverAllMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - recoverAllMethod.addException(new FullyQualifiedJavaType("Throwable")); - recoverAllMethod.setAbstract(true); - repositoryInterface.addMethod(recoverAllMethod); + // 4. findOne + Method findOneMethod = new Method("findOne"); + findOneMethod.setVisibility(JavaVisibility.PUBLIC); + findOneMethod.setReturnType(new FullyQualifiedJavaType(modelClassName)); + findOneMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); + findOneMethod.addException(new FullyQualifiedJavaType("Throwable")); + findOneMethod.setAbstract(true); + repositoryInterface.addMethod(findOneMethod); - // 7. findAnyById - Method findAnyByIdMethod = new Method("findAnyById"); - findAnyByIdMethod.setVisibility(JavaVisibility.PUBLIC); - findAnyByIdMethod.setReturnType(new FullyQualifiedJavaType(modelClassName)); - findAnyByIdMethod.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "id")); - findAnyByIdMethod.addException(new FullyQualifiedJavaType("Throwable")); - findAnyByIdMethod.setAbstract(true); - repositoryInterface.addMethod(findAnyByIdMethod); + // 5. list + Method listMethod = new Method("list"); + listMethod.setVisibility(JavaVisibility.PUBLIC); + listMethod.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">")); + listMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); + listMethod.addException(new FullyQualifiedJavaType("Throwable")); + listMethod.setAbstract(true); + repositoryInterface.addMethod(listMethod); - // 8. findValidById - Method findValidByIdMethod = new Method("findValidById"); - findValidByIdMethod.setVisibility(JavaVisibility.PUBLIC); - findValidByIdMethod.setReturnType(new FullyQualifiedJavaType(modelClassName)); - findValidByIdMethod.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "id")); - findValidByIdMethod.addException(new FullyQualifiedJavaType("Throwable")); - findValidByIdMethod.setAbstract(true); - repositoryInterface.addMethod(findValidByIdMethod); + // 5. list + Method listWithRowBoundsMethod = new Method("list"); + listWithRowBoundsMethod.setVisibility(JavaVisibility.PUBLIC); + listWithRowBoundsMethod.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">")); + listWithRowBoundsMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); + listWithRowBoundsMethod.addParameter(new Parameter(new FullyQualifiedJavaType("org.apache.ibatis.session.RowBounds"), "rowBounds")); + listWithRowBoundsMethod.addException(new FullyQualifiedJavaType("Throwable")); + listWithRowBoundsMethod.setAbstract(true); + repositoryInterface.addMethod(listWithRowBoundsMethod); - // 9. findTrashById - Method findTrashByIdMethod = new Method("findTrashById"); - findTrashByIdMethod.setVisibility(JavaVisibility.PUBLIC); - findTrashByIdMethod.setReturnType(new FullyQualifiedJavaType(modelClassName)); - findTrashByIdMethod.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "id")); - findTrashByIdMethod.addException(new FullyQualifiedJavaType("Throwable")); - findTrashByIdMethod.setAbstract(true); - repositoryInterface.addMethod(findTrashByIdMethod); + // 6. count + Method countMethod = new Method("count"); + countMethod.setVisibility(JavaVisibility.PUBLIC); + countMethod.setReturnType(new FullyQualifiedJavaType("long")); + countMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); + countMethod.addException(new FullyQualifiedJavaType("Throwable")); + countMethod.setAbstract(true); + repositoryInterface.addMethod(countMethod); - // 10. findValidOne - Method findValidOneMethod = new Method("findValidOne"); - findValidOneMethod.setVisibility(JavaVisibility.PUBLIC); - findValidOneMethod.setReturnType(new FullyQualifiedJavaType(modelClassName)); - findValidOneMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - findValidOneMethod.addException(new FullyQualifiedJavaType("Throwable")); - findValidOneMethod.setAbstract(true); - repositoryInterface.addMethod(findValidOneMethod); - - // 11. findTrashOne - Method findTrashOneMethod = new Method("findTrashOne"); - findTrashOneMethod.setVisibility(JavaVisibility.PUBLIC); - findTrashOneMethod.setReturnType(new FullyQualifiedJavaType(modelClassName)); - findTrashOneMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - findTrashOneMethod.addException(new FullyQualifiedJavaType("Throwable")); - findTrashOneMethod.setAbstract(true); - repositoryInterface.addMethod(findTrashOneMethod); - - // 12. getValidList - Method getValidListMethod = new Method("getValidList"); - getValidListMethod.setVisibility(JavaVisibility.PUBLIC); - getValidListMethod.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">")); - getValidListMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - getValidListMethod.addException(new FullyQualifiedJavaType("Throwable")); - getValidListMethod.setAbstract(true); - repositoryInterface.addMethod(getValidListMethod); - - // 13. getTrashList - Method getTrashListMethod = new Method("getTrashList"); - getTrashListMethod.setVisibility(JavaVisibility.PUBLIC); - getTrashListMethod.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">")); - getTrashListMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - getTrashListMethod.addException(new FullyQualifiedJavaType("Throwable")); - getTrashListMethod.setAbstract(true); - repositoryInterface.addMethod(getTrashListMethod); - - // 14. countByValid - Method countByValidMethod = new Method("countByValid"); - countByValidMethod.setVisibility(JavaVisibility.PUBLIC); - countByValidMethod.setReturnType(new FullyQualifiedJavaType("long")); - countByValidMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - countByValidMethod.addException(new FullyQualifiedJavaType("Throwable")); - countByValidMethod.setAbstract(true); - repositoryInterface.addMethod(countByValidMethod); - - // 15. countByValidWithPage - Method countByValidWithPageMethod = new Method("countByValidWithPage"); - countByValidWithPageMethod.setVisibility(JavaVisibility.PUBLIC); - countByValidWithPageMethod.setReturnType(new FullyQualifiedJavaType("long")); - countByValidWithPageMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - countByValidWithPageMethod.addException(new FullyQualifiedJavaType("Throwable")); - countByValidWithPageMethod.setAbstract(true); - repositoryInterface.addMethod(countByValidWithPageMethod); - - // 16. countByTrash - Method countByTrashMethod = new Method("countByTrash"); - countByTrashMethod.setVisibility(JavaVisibility.PUBLIC); - countByTrashMethod.setReturnType(new FullyQualifiedJavaType("long")); - countByTrashMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - countByTrashMethod.addException(new FullyQualifiedJavaType("Throwable")); - countByTrashMethod.setAbstract(true); - repositoryInterface.addMethod(countByTrashMethod); - - // 17. countByTrashWithPage - Method countByTrashWithPageMethod = new Method("countByTrashWithPage"); - countByTrashWithPageMethod.setVisibility(JavaVisibility.PUBLIC); - countByTrashWithPageMethod.setReturnType(new FullyQualifiedJavaType("long")); - countByTrashWithPageMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - countByTrashWithPageMethod.addException(new FullyQualifiedJavaType("Throwable")); - countByTrashWithPageMethod.setAbstract(true); - repositoryInterface.addMethod(countByTrashWithPageMethod); - - // 18. insert + // 7. insert Method insertMethod = new Method("insert"); insertMethod.setVisibility(JavaVisibility.PUBLIC); insertMethod.setReturnType(new FullyQualifiedJavaType(modelClassName)); @@ -322,16 +247,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { insertMethod.setAbstract(true); repositoryInterface.addMethod(insertMethod); - // 19. batchInsert - Method batchInsertMethod = new Method("batchInsert"); - batchInsertMethod.setVisibility(JavaVisibility.PUBLIC); - batchInsertMethod.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">")); - batchInsertMethod.addParameter(new Parameter(new FullyQualifiedJavaType("List<" + modelClassName + ">"), "records")); - batchInsertMethod.addException(new FullyQualifiedJavaType("Throwable")); - batchInsertMethod.setAbstract(true); - repositoryInterface.addMethod(batchInsertMethod); - - // 20. update + // 8. update Method updateMethod = new Method("update"); updateMethod.setVisibility(JavaVisibility.PUBLIC); updateMethod.setReturnType(new FullyQualifiedJavaType("int")); @@ -340,7 +256,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { updateMethod.setAbstract(true); repositoryInterface.addMethod(updateMethod); - // 21. updateByExampleSelective + // 9. updateByExampleSelective Method updateByExampleSelectiveMethod = new Method("updateByExampleSelective"); updateByExampleSelectiveMethod.setVisibility(JavaVisibility.PUBLIC); updateByExampleSelectiveMethod.setReturnType(new FullyQualifiedJavaType("int")); @@ -390,27 +306,16 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addField(mapperField); // 原有方法生成逻辑(无修改) - generateFindAnyByIdMethod(implClass, modelClassName, mapperFieldName, exampleClassName, hasBLOBColumns); - generateFindValidByIdMethod(implClass, modelClassName, mapperFieldName, exampleClassName, hasBLOBColumns); - generateFindTrashByIdMethod(implClass, modelClassName, mapperFieldName, exampleClassName, hasBLOBColumns); + generateFindByIdMethod(implClass, modelClassName, mapperFieldName, exampleClassName, hasBLOBColumns); + generateFindOneMethod(implClass, modelClassName, exampleClassName); generateInsertMethod(implClass, modelClassName, mapperFieldName, introspectedTable); - generateBatchInsertMethod(implClass, modelClassName, mapperFieldName, introspectedTable); generateUpdateMethod(implClass, modelClassName, exampleClassName, mapperFieldName, introspectedTable, hasBLOBColumns); generateUpdateByExampleSelectiveMethod(implClass, modelClassName, exampleClassName, mapperFieldName, introspectedTable, hasBLOBColumns); generateDeleteByIdMethod(implClass, modelClassName, mapperFieldName); generateDeleteAllMethod(implClass, modelClassName, exampleClassName, mapperFieldName); - generateTrashByIdMethod(implClass, modelClassName, mapperFieldName); - generateTrashAllMethod(implClass, modelClassName, exampleClassName, mapperFieldName); - generateRecoverByIdMethod(implClass, modelClassName, mapperFieldName); - generateRecoverAllMethod(implClass, modelClassName, exampleClassName, mapperFieldName); - generateFindValidOneMethod(implClass, modelClassName, exampleClassName); - generateFindTrashOneMethod(implClass, modelClassName, exampleClassName); - generateGetValidListMethod(implClass, modelClassName, exampleClassName, mapperFieldName, hasBLOBColumns); - generateGetTrashListMethod(implClass, modelClassName, exampleClassName, mapperFieldName, hasBLOBColumns); - generateCountByValidMethod(implClass, modelClassName, exampleClassName, mapperFieldName); - generateCountByValidWithPageMethod(implClass, modelClassName, exampleClassName, mapperFieldName); - generateCountByTrashMethod(implClass, modelClassName, exampleClassName, mapperFieldName); - generateCountByTrashWithPageMethod(implClass, modelClassName, exampleClassName, mapperFieldName); + generateListMethod(implClass, modelClassName, exampleClassName, mapperFieldName, hasBLOBColumns); + generateListWithRowBoundsMethod(implClass, modelClassName, exampleClassName, mapperFieldName, hasBLOBColumns); + generateCountMethod(implClass, modelClassName, exampleClassName, mapperFieldName); return implClass; } @@ -467,6 +372,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addImportedType(new FullyQualifiedJavaType(modelPackage + "." + modelClassName)); implClass.addImportedType(new FullyQualifiedJavaType(modelPackage + "." + exampleClassName)); implClass.addImportedType(new FullyQualifiedJavaType(facadeRepositoryPackage + "." + interfaceName)); + implClass.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.session.RowBounds")); implClass.addImportedType(new FullyQualifiedJavaType("org.springframework.stereotype.Repository")); implClass.addImportedType(new FullyQualifiedJavaType("javax.annotation.Resource")); implClass.addImportedType(new FullyQualifiedJavaType("org.slf4j.Logger")); @@ -474,8 +380,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addImportedType(new FullyQualifiedJavaType("java.util.*")); } - private void generateFindAnyByIdMethod(TopLevelClass implClass, String modelClassName, String mapperFieldName, String exampleClassName, boolean hasBLOBColumns) { - Method method = new Method("findAnyById"); + private void generateFindByIdMethod(TopLevelClass implClass, String modelClassName, String mapperFieldName, String exampleClassName, boolean hasBLOBColumns) { + Method method = new Method("findById"); method.addAnnotation("@Override"); method.setVisibility(JavaVisibility.PUBLIC); method.setReturnType(new FullyQualifiedJavaType(modelClassName)); @@ -499,54 +405,20 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addMethod(method); } - private void generateFindValidByIdMethod(TopLevelClass implClass, String modelClassName, String mapperFieldName, String exampleClassName, boolean hasBLOBColumns) { - Method method = new Method("findValidById"); + private void generateFindOneMethod(TopLevelClass implClass, String modelClassName, String exampleClassName) { + Method method = new Method("findOne"); method.addAnnotation("@Override"); method.setVisibility(JavaVisibility.PUBLIC); method.setReturnType(new FullyQualifiedJavaType(modelClassName)); - method.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "guid")); + method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); method.addException(new FullyQualifiedJavaType("Throwable")); - method.addBodyLine(modelClassName + " aDo = null;"); - method.addBodyLine(exampleClassName + " example"); - method.addBodyLine(" = new " + exampleClassName + "();"); - method.addBodyLine("example.createCriteria()"); - method.addBodyLine(" .andIsHiddenEqualTo(0)"); - method.addBodyLine(" .andIsDeleteEqualTo(0)"); - method.addBodyLine(" .andGuidEqualTo(guid);"); - String selectByExampleMethod = hasBLOBColumns ? "selectByExampleWithBLOBs" : "selectByExample"; - method.addBodyLine("List<" + modelClassName + "> recordList"); - method.addBodyLine(" = " + mapperFieldName + "." + selectByExampleMethod + "(example);"); - method.addBodyLine("if (recordList != null && !recordList.isEmpty()) {"); - method.addBodyLine("aDo = recordList.get(0);"); + method.addBodyLine("example.usePage(1, 1);"); + method.addBodyLine("List<" + modelClassName + "> dataList = list(example);"); + method.addBodyLine("if (dataList != null && !dataList.isEmpty()) {"); + method.addBodyLine("return dataList.get(0);"); method.addBodyLine("}"); - method.addBodyLine("return aDo;"); - - implClass.addMethod(method); - } - - private void generateFindTrashByIdMethod(TopLevelClass implClass, String modelClassName, String mapperFieldName, String exampleClassName, boolean hasBLOBColumns) { - Method method = new Method("findTrashById"); - method.addAnnotation("@Override"); - method.setVisibility(JavaVisibility.PUBLIC); - method.setReturnType(new FullyQualifiedJavaType(modelClassName)); - method.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "guid")); - method.addException(new FullyQualifiedJavaType("Throwable")); - - method.addBodyLine(modelClassName + " aDo = null;"); - method.addBodyLine(exampleClassName + " example"); - method.addBodyLine(" = new " + exampleClassName + "();"); - method.addBodyLine("example.createCriteria()"); - method.addBodyLine(" .andIsHiddenEqualTo(1)"); - method.addBodyLine(" .andIsDeleteEqualTo(0)"); - method.addBodyLine(" .andGuidEqualTo(guid);"); - String selectByExampleMethod = hasBLOBColumns ? "selectByExampleWithBLOBs" : "selectByExample"; - method.addBodyLine("List<" + modelClassName + "> recordList"); - method.addBodyLine(" = " + mapperFieldName + "." + selectByExampleMethod + "(example);"); - method.addBodyLine("if (recordList != null && !recordList.isEmpty()) {"); - method.addBodyLine("aDo = recordList.get(0);"); - method.addBodyLine("}"); - method.addBodyLine("return aDo;"); + method.addBodyLine("return null;"); implClass.addMethod(method); } @@ -581,7 +453,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { } 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());"); @@ -604,63 +475,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addMethod(method); } - private void generateBatchInsertMethod(TopLevelClass implClass, String modelClassName, String mapperFieldName, IntrospectedTable introspectedTable) { - Method method = new Method("batchInsert"); - method.addAnnotation("@Override"); - method.setVisibility(JavaVisibility.PUBLIC); - method.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">")); - method.addParameter(new Parameter(new FullyQualifiedJavaType("List<" + modelClassName + ">"), "records")); - method.addException(new FullyQualifiedJavaType("Throwable")); - - method.addBodyLine("if (records == null || records.isEmpty()) {"); - method.addBodyLine("return new ArrayList<>();"); - method.addBodyLine("}"); - method.addBodyLine("List<" + modelClassName + "> batch = new ArrayList<>();"); - method.addBodyLine("for (" + modelClassName + " record : records) {"); - method.addBodyLine(modelClassName + " aDo = new " + modelClassName + "();"); - method.addBodyLine("if (record.getGuid() != null) {"); - method.addBodyLine("aDo.setGuid(record.getGuid());"); - method.addBodyLine("} else {"); - method.addBodyLine("Long guid = " + guidGeneratorCode + ";"); - method.addBodyLine("aDo.setGuid(guid);"); - method.addBodyLine("}"); - - for (IntrospectedColumn column : introspectedTable.getAllColumns()) { - String fieldName = column.getJavaProperty(); - String setterMethod = "set" + upperFirst(fieldName); - String getterMethod = "get" + upperFirst(fieldName); - if ("guid".equals(fieldName) || "isDelete".equals(fieldName) || "isHidden".equals(fieldName) - || "deleteToken".equals(fieldName) || "dataVersion".equals(fieldName) - || "createTime".equals(fieldName) || "updateTime".equals(fieldName)) { - continue; - } - method.addBodyLine("aDo." + setterMethod + "(record." + getterMethod + "());"); - } - - 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());"); - method.addBodyLine("aDo.setUpdateTime(new Date());"); - method.addBodyLine("batch.add(aDo);"); - method.addBodyLine("}"); - - method.addBodyLine("int count = " + mapperFieldName + ".batchInsert(batch);"); - method.addBodyLine("if (count == batch.size()) {"); - if (isChangeLogEnable()) { - method.addBodyLine("for (" + modelClassName + " aDo : batch) {"); - method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\","); - method.addBodyLine(" \"batchInsert\", aDo.getGuid(), new HashMap<>());"); - method.addBodyLine("}"); - } - method.addBodyLine("return batch;"); - method.addBodyLine("}"); - method.addBodyLine("throw new Throwable(\"Batch insert failed, " + modelClassName + " affected: \" + count + \", expected: \" + batch.size());"); - - implClass.addMethod(method); - } - private void generateUpdateMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName, IntrospectedTable introspectedTable, boolean hasBLOBColumns) { Method method = new Method("update"); @@ -697,13 +511,19 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("}"); } method.addBodyLine(exampleClassName + " updateWhere = new " + exampleClassName + "();"); - method.addBodyLine("Integer lockDataVersion = record.getDataVersion();"); - method.addBodyLine("if (lockDataVersion == null) {"); - method.addBodyLine("lockDataVersion = aDo.getDataVersion();"); - method.addBodyLine("}"); - method.addBodyLine("updateWhere.createCriteria()"); - method.addBodyLine(" .andGuidEqualTo(aDo.getGuid())"); - method.addBodyLine(" .andDataVersionEqualTo(lockDataVersion);"); + if (isOptimisticLockEnable()) { + method.addBodyLine("Integer lockDataVersion = record.getDataVersion();"); + method.addBodyLine("if (lockDataVersion == null) {"); + method.addBodyLine("lockDataVersion = aDo.getDataVersion();"); + method.addBodyLine("}"); + 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.setUpdateTime(new Date());"); method.addBodyLine("// update data version"); @@ -735,7 +555,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { // 方法体 method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(0);"); + method.addBodyLine("criteria.andIsDeleteEqualTo(0);"); method.addBodyLine("}"); method.addBodyLine("List guidList = " + mapperFieldName); @@ -746,7 +566,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("example = new " + exampleClassName + "();"); method.addBodyLine("example.createCriteria()"); method.addBodyLine(" .andIsDeleteEqualTo(0)"); - method.addBodyLine(" .andIsHiddenEqualTo(0)"); method.addBodyLine(" .andGuidIn(guidList);"); if (isChangeLogEnable()) { String selectByExampleMethod = hasBLOBColumns ? "selectByExampleWithBLOBs" : "selectByExample"; @@ -775,7 +594,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("record.setDataVersion(100);"); method.addBodyLine("// It is not supported to directly modify the following columns"); method.addBodyLine("record.setUpdateTime(new Date());"); - method.addBodyLine("record.setIsHidden(null);"); method.addBodyLine("record.setIsDelete(null);"); method.addBodyLine("record.setDeleteToken(null);"); method.addBodyLine("record.setCreateTime(null);"); @@ -804,7 +622,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "id")); method.addParameter(new Parameter(new FullyQualifiedJavaType("boolean"), "release")); method.addException(new FullyQualifiedJavaType("Throwable")); - method.addBodyLine(modelClassName + " aDo = findValidById(id);"); + method.addBodyLine(modelClassName + " aDo = findById(id);"); method.addBodyLine("if (aDo == null) {"); method.addBodyLine("return 0;"); method.addBodyLine("}"); @@ -824,65 +642,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addMethod(method); } - private void generateTrashByIdMethod(TopLevelClass implClass, String modelClassName, String mapperFieldName) { - Method method = new Method("trashById"); - method.addAnnotation("@Override"); - method.setVisibility(JavaVisibility.PUBLIC); - method.setReturnType(new FullyQualifiedJavaType("int")); - method.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "id")); - method.addException(new FullyQualifiedJavaType("Throwable")); - - method.addBodyLine(modelClassName + " aDo = findValidById(id);"); - method.addBodyLine("if (aDo == null) {"); - method.addBodyLine("return 0;"); - method.addBodyLine("}"); - method.addBodyLine("aDo.setIsHidden(1);"); - method.addBodyLine("aDo.setDeleteToken(aDo.getGuid() + \"\");"); - method.addBodyLine("aDo.setUpdateTime(new Date());"); - if (isChangeLogEnable()) { - method.addBodyLine("int update = " + mapperFieldName + ".updateByPrimaryKey(aDo);"); - method.addBodyLine("if (update > 0) {"); - method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\","); - method.addBodyLine(" \"trashById\", aDo.getGuid(), new HashMap<>());"); - method.addBodyLine("}"); - method.addBodyLine("return update;"); - } else { - method.addBodyLine("return " + mapperFieldName + ".updateByPrimaryKey(aDo);"); - } - implClass.addMethod(method); - } - - private void generateRecoverByIdMethod(TopLevelClass implClass, String modelClassName, String mapperFieldName) { - Method method = new Method("recoverById"); - method.addAnnotation("@Override"); - method.setVisibility(JavaVisibility.PUBLIC); - method.setReturnType(new FullyQualifiedJavaType("int")); - method.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "id")); - method.addException(new FullyQualifiedJavaType("Throwable")); - - method.addBodyLine(modelClassName + " aDo = findTrashById(id);"); - method.addBodyLine("if (aDo == null) {"); - method.addBodyLine("return 0;"); - method.addBodyLine("}"); - method.addBodyLine("if (aDo.getIsDelete() == 1) {"); - method.addBodyLine("return 0;"); - method.addBodyLine("}"); - method.addBodyLine("aDo.setIsHidden(0);"); - method.addBodyLine("aDo.setDeleteToken(\"VALID\");"); - method.addBodyLine("aDo.setUpdateTime(new Date());"); - if (isChangeLogEnable()) { - method.addBodyLine("int update = " + mapperFieldName + ".updateByPrimaryKey(aDo);"); - method.addBodyLine("if (update > 0) {"); - method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\","); - method.addBodyLine(" \"recoverById\", aDo.getGuid(), new HashMap<>());"); - method.addBodyLine("}"); - method.addBodyLine("return update;"); - } else { - method.addBodyLine("return " + mapperFieldName + ".updateByPrimaryKey(aDo);"); - } - implClass.addMethod(method); - } - private void generateDeleteAllMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName) { Method method = new Method("deleteAll"); method.addAnnotation("@Override"); @@ -897,7 +656,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("return " + mapperFieldName + ".deleteByExample(example);"); method.addBodyLine("}"); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(1);"); + method.addBodyLine("criteria.andIsDeleteEqualTo(0);"); method.addBodyLine("}"); method.addBodyLine("List guidList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);"); method.addBodyLine("if (guidList.isEmpty()) {"); @@ -921,116 +680,9 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addMethod(method); } - private void generateTrashAllMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName) { - Method method = new Method("trashAll"); - method.addAnnotation("@Override"); - method.setVisibility(JavaVisibility.PUBLIC); - method.setReturnType(new FullyQualifiedJavaType("int")); - method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - method.addException(new FullyQualifiedJavaType("Throwable")); - - // 方法体 - method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(0);"); - method.addBodyLine("}"); - method.addBodyLine("List guidList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);"); - method.addBodyLine("if (guidList.isEmpty()) {"); - method.addBodyLine("return 0;"); - method.addBodyLine("}"); - method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();"); - method.addBodyLine(lowerFirst(modelClassName) + ".setIsHidden(1);"); - method.addBodyLine(lowerFirst(modelClassName) + ".setDeleteToken(" + guidGeneratorCode + " + \"\");"); - method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());"); - if (isChangeLogEnable()) { - method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);"); - method.addBodyLine("if (update > 0) {"); - method.addBodyLine("for (Long guid : guidList) {"); - method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\","); - method.addBodyLine(" \"trashAll\", guid, new HashMap<>());"); - method.addBodyLine("}"); - method.addBodyLine("}"); - method.addBodyLine("return update;"); - } else { - method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);"); - } - implClass.addMethod(method); - } - - private void generateRecoverAllMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName) { - Method method = new Method("recoverAll"); - method.addAnnotation("@Override"); - method.setVisibility(JavaVisibility.PUBLIC); - method.setReturnType(new FullyQualifiedJavaType("int")); - method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - method.addException(new FullyQualifiedJavaType("Throwable")); - - // 方法体 - method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(1);"); - method.addBodyLine("}"); - method.addBodyLine("List guidList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);"); - method.addBodyLine("if (guidList.isEmpty()) {"); - method.addBodyLine("return 0;"); - method.addBodyLine("}"); - method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();"); - method.addBodyLine(lowerFirst(modelClassName) + ".setIsHidden(0);"); - method.addBodyLine(lowerFirst(modelClassName) + ".setDeleteToken(\"VALID\");"); - method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());"); - if (isChangeLogEnable()) { - method.addBodyLine("int update = " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);"); - method.addBodyLine("if (update > 0) {"); - method.addBodyLine("for (Long guid : guidList) {"); - method.addBodyLine(changeLogContextClassName + ".addLog(\"" + modelClassName + "\","); - method.addBodyLine(" \"recoverAll\", guid, new HashMap<>());"); - method.addBodyLine("}"); - method.addBodyLine("}"); - method.addBodyLine("return update;"); - } else { - method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);"); - } - - implClass.addMethod(method); - } - - private void generateFindValidOneMethod(TopLevelClass implClass, String modelClassName, String exampleClassName) { - Method method = new Method("findValidOne"); - method.addAnnotation("@Override"); - method.setVisibility(JavaVisibility.PUBLIC); - method.setReturnType(new FullyQualifiedJavaType(modelClassName)); - method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - method.addException(new FullyQualifiedJavaType("Throwable")); - - method.addBodyLine("example.usePage(1, 1);"); - method.addBodyLine("List<" + modelClassName + "> dataList = getValidList(example);"); - method.addBodyLine("if (dataList != null && !dataList.isEmpty()) {"); - method.addBodyLine("return dataList.get(0);"); - method.addBodyLine("}"); - method.addBodyLine("return null;"); - - implClass.addMethod(method); - } - - private void generateFindTrashOneMethod(TopLevelClass implClass, String modelClassName, String exampleClassName) { - Method method = new Method("findTrashOne"); - method.addAnnotation("@Override"); - method.setVisibility(JavaVisibility.PUBLIC); - method.setReturnType(new FullyQualifiedJavaType(modelClassName)); - method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - method.addException(new FullyQualifiedJavaType("Throwable")); - - method.addBodyLine("example.usePage(1, 1);"); - method.addBodyLine("List<" + modelClassName + "> dataList = getTrashList(example);"); - method.addBodyLine("if (dataList != null && !dataList.isEmpty()) {"); - method.addBodyLine("return dataList.get(0);"); - method.addBodyLine("}"); - method.addBodyLine("return null;"); - - implClass.addMethod(method); - } - - private void generateGetValidListMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, - String mapperFieldName, boolean hasBLOBColumns) { - Method method = new Method("getValidList"); + private void generateListMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, + String mapperFieldName, boolean hasBLOBColumns) { + Method method = new Method("list"); method.addAnnotation("@Override"); method.setVisibility(JavaVisibility.PUBLIC); method.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">")); @@ -1038,7 +690,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addException(new FullyQualifiedJavaType("Throwable")); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(0);"); + method.addBodyLine("criteria.andIsDeleteEqualTo(0);"); method.addBodyLine("}"); method.addBodyLine("List<" + modelClassName + "> result = null;"); method.addBodyLine("long startTime = new Date().getTime();"); @@ -1105,17 +757,23 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addMethod(method); } - private void generateGetTrashListMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, - String mapperFieldName, boolean hasBLOBColumns) { - Method method = new Method("getTrashList"); + private void generateListWithRowBoundsMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, + String mapperFieldName, boolean hasBLOBColumns) { + Method method = new Method("list"); method.addAnnotation("@Override"); method.setVisibility(JavaVisibility.PUBLIC); method.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">")); method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); + method.addParameter(new Parameter(new FullyQualifiedJavaType("org.apache.ibatis.session.RowBounds"), "rowBounds")); method.addException(new FullyQualifiedJavaType("Throwable")); + method.addBodyLine("// 兼容原来的写法rowBounds"); + method.addBodyLine("if (rowBounds != null) {"); + method.addBodyLine("example.limit(rowBounds.getOffset(), rowBounds.getLimit())"); + method.addBodyLine("}"); + method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(1);"); + method.addBodyLine("criteria.andIsDeleteEqualTo(0);"); method.addBodyLine("}"); method.addBodyLine("List<" + modelClassName + "> result = null;"); method.addBodyLine("long startTime = new Date().getTime();"); @@ -1137,7 +795,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("if (example.getLimitString() != null) {"); method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); method.addBodyLine("}"); - method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " trash list primary key use long time\" +"); + method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " valid list primary key use long time\" +"); method.addBodyLine(" \"\\n\\t|-> use time:\" + findPrimaryKeyTime + \"ms\" +"); method.addBodyLine(" exampleString +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); @@ -1172,7 +830,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("if (example.getLimitString() != null) {"); method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); method.addBodyLine("}"); - method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " trash list use long time\" +"); + method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " valid list use long time\" +"); method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); method.addBodyLine(" exampleString +"); method.addBodyLine(" \"\\n\\t|-----------------------------------\""); @@ -1182,8 +840,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addMethod(method); } - private void generateCountByValidMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName) { - Method method = new Method("countByValid"); + private void generateCountMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName) { + Method method = new Method("count"); method.addAnnotation("@Override"); method.setVisibility(JavaVisibility.PUBLIC); method.setReturnType(new FullyQualifiedJavaType("long")); @@ -1191,7 +849,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addException(new FullyQualifiedJavaType("Throwable")); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(0);"); + method.addBodyLine("criteria.andIsDeleteEqualTo(0);"); method.addBodyLine("}"); method.addBodyLine("long startTime = new Date().getTime();"); method.addBodyLine("long count = " + mapperFieldName + ".countByExample(example);"); @@ -1215,73 +873,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addMethod(method); } - private void generateCountByValidWithPageMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName) { - Method method = new Method("countByValidWithPage"); - method.addAnnotation("@Override"); - method.setVisibility(JavaVisibility.PUBLIC); - method.setReturnType(new FullyQualifiedJavaType("long")); - method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - method.addException(new FullyQualifiedJavaType("Throwable")); - - method.addBodyLine("// When not paginated, the count query returns 0 to avoid unnecessary queries"); - method.addBodyLine("if (example.getRows() != null && example.getOffset() != null) {"); - method.addBodyLine("return countByValid(example);"); - method.addBodyLine("}"); - method.addBodyLine("return 0L;"); - - implClass.addMethod(method); - } - - private void generateCountByTrashMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName) { - Method method = new Method("countByTrash"); - method.addAnnotation("@Override"); - method.setVisibility(JavaVisibility.PUBLIC); - method.setReturnType(new FullyQualifiedJavaType("long")); - method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - method.addException(new FullyQualifiedJavaType("Throwable")); - - method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(1);"); - method.addBodyLine("}"); - method.addBodyLine("long startTime = new Date().getTime();"); - method.addBodyLine("long count = " + mapperFieldName + ".countByExample(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("if (example.getOrderByClause() != null) {"); - method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();"); - method.addBodyLine("}"); - method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " trash count use long time\" +"); - method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +"); - method.addBodyLine(" exampleString +"); - method.addBodyLine(" \"\\n\\t|-----------------------------------\""); - method.addBodyLine(");"); - method.addBodyLine("}"); - method.addBodyLine("return count;"); - - implClass.addMethod(method); - } - - private void generateCountByTrashWithPageMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName) { - Method method = new Method("countByTrashWithPage"); - method.addAnnotation("@Override"); - method.setVisibility(JavaVisibility.PUBLIC); - method.setReturnType(new FullyQualifiedJavaType("long")); - method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - method.addException(new FullyQualifiedJavaType("Throwable")); - - method.addBodyLine("// When not paginated, the count query returns 0 to avoid unnecessary queries"); - method.addBodyLine("if (example.getRows() != null && example.getOffset() != null) {"); - method.addBodyLine("return countByTrash(example);"); - method.addBodyLine("}"); - method.addBodyLine("return 0L;"); - - implClass.addMethod(method); - } - private String upperFirst(String str) { if (str == null || str.isEmpty()) { return str;