From 88fa1c88dd7de2905e39061f357db77ef27a1b20 Mon Sep 17 00:00:00 2001 From: iqudoo Date: Sat, 23 May 2026 19:27:01 +0800 Subject: [PATCH] init --- README.md | 29 +- ...-mybatis-generator-plugin-1.0-SNAPSHOT.jar | Bin 41361 -> 41069 bytes .../mybatis/TapeMybatisGeneratorPlugin.java | 138 ++++++- .../TapeRepositoryGeneratorPlugin.java | 337 +++++------------- 4 files changed, 226 insertions(+), 278 deletions(-) diff --git a/README.md b/README.md index 51619f9..4da2cb1 100644 --- a/README.md +++ b/README.md @@ -35,17 +35,11 @@ - `deleteAll({Example} example, boolean release)` - 删除(批量,支持物理删除) - `recoverById(long id)` - 从回收站恢复(单个) - `recoverAll({Example} example)` - 从回收站恢复(批量) -- `findAnyById(long id)` - 查找(不区分有效/回收站) -- `findValidById(long id)` - 查找有效记录(单个) -- `findTrashById(long id)` - 查找回收站记录(单个) -- `findValidOne({Example} example)` - 查找有效记录(单个,支持条件) -- `findTrashOne({Example} example)` - 查找回收站记录(单个,支持条件) -- `getValidList({Example} example)` - 获取有效记录列表(支持分页) -- `getTrashList({Example} example)` - 获取回收站记录列表(支持分页) -- `countByValid({Example} example)` - 统计有效记录数 -- `countByValidWithPage({Example} example)` - 统计分页有效记录数 -- `countByTrash({Example} example)` - 统计回收站记录数 -- `countByTrashWithPage({Example} example)` - 统计分页回收站记录数 +- `findById(long id)` - 根据主键查询数据 +- `findOne({Example} example)` - 查找单条数据 +- `getList({Example} example)` - 获取多条数据 +- `count({Example} example)` - 统计记录数 +- `countByWithPage({Example} example)` - 统计分页记录数 - `insert({Model} record)` - 插入记录(自动生成 GUID、设置默认值) - `batchInsert(List<{Model}> records)` - 批量插入记录(自动生成 GUID、设置默认值) - `updateByExampleSelective({Model} record, {Example} example)` - 按条件更新记录 @@ -55,9 +49,8 @@ 为视图表生成 RepoView 层代码: -- **接口位置**: `{facadeRepoviewPackage}.I{TableName}Repo` -- **实现类位置**: `{domainRepoviewPackage}.{TableName}RepoImpl` -- **视图表识别**: 仅处理包含 `viewKeyWords` 关键字的表 +- **接口位置**: `{facadeViewRepositoryPackage}.I{TableName}Repo` +- **实现类位置**: `{domainViewRepositoryPackage}.{TableName}RepoImpl` **生成的方法**: @@ -77,6 +70,7 @@ - `ignorePageSize` - 忽略分页数量(默认 10000)每页数量大于10000时,忽略分页 - `maxPageSize` - 最大每页数量(默认 100) - `withBLOBs` - 是否返回BLOBs列的数据 +- `resultType` - 返回数据格式:any, trash, valid(默认) **添加的方法**: @@ -85,6 +79,13 @@ - `usePage(int pageNum, int pageSize)` - 使用页码和每页数量(自动计算 offset) - `setWithBLOBs(boolean withBLOBs)` - 设置是否返回BLOBs列的数据 - `isWithBLOBs()` - 是否返回BLOBs列的数据 +- `setResultType(String type)` - 设置返回值的类型 +- `resultAny()` - 不区分 +- `isResultAny()` - 查询不区分 +- `resultTrash()` - 回收站 +- `isResultTrash()` - 查询回收站 +- `resultValid()` - 有效数据 +- `isResultValid()` - 查询有效数据 - `getPageNum()` - 获取当前页码 - `getPageSize()` - 获取当前每页数量 - `getOffset()` - 获取当前分页limit的offset diff --git a/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar b/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar index 779f5bb989fdf78db1233cf464cde240f128c6af..e693dd106c6777b47a21f229ebb6d78bd49a0fa1 100644 GIT binary patch delta 25003 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 delta 25244 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 j")); + getListMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); + getListMethod.addException(new FullyQualifiedJavaType("Throwable")); + getListMethod.setAbstract(true); + repositoryInterface.addMethod(getListMethod); - // 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); + // 10. 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); - // 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); + // 11. countWithPage + Method countWithPageMethod = new Method("countWithPage"); + countWithPageMethod.setVisibility(JavaVisibility.PUBLIC); + countWithPageMethod.setReturnType(new FullyQualifiedJavaType("long")); + countWithPageMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); + countWithPageMethod.addException(new FullyQualifiedJavaType("Throwable")); + countWithPageMethod.setAbstract(true); + repositoryInterface.addMethod(countWithPageMethod); - // 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 + // 12. insert Method insertMethod = new Method("insert"); insertMethod.setVisibility(JavaVisibility.PUBLIC); insertMethod.setReturnType(new FullyQualifiedJavaType(modelClassName)); @@ -353,7 +317,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { insertMethod.setAbstract(true); repositoryInterface.addMethod(insertMethod); - // 19. batchInsert + // 13. batchInsert Method batchInsertMethod = new Method("batchInsert"); batchInsertMethod.setVisibility(JavaVisibility.PUBLIC); batchInsertMethod.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">")); @@ -362,7 +326,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { batchInsertMethod.setAbstract(true); repositoryInterface.addMethod(batchInsertMethod); - // 20. update + // 14. update Method updateMethod = new Method("update"); updateMethod.setVisibility(JavaVisibility.PUBLIC); updateMethod.setReturnType(new FullyQualifiedJavaType("int")); @@ -371,7 +335,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { updateMethod.setAbstract(true); repositoryInterface.addMethod(updateMethod); - // 21. updateByExampleSelective + // 15. updateByExampleSelective Method updateByExampleSelectiveMethod = new Method("updateByExampleSelective"); updateByExampleSelectiveMethod.setVisibility(JavaVisibility.PUBLIC); updateByExampleSelectiveMethod.setReturnType(new FullyQualifiedJavaType("int")); @@ -436,14 +400,10 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { generateTrashAllMethod(implClass, tableName, introspectedTable, modelClassName, exampleClassName, mapperFieldName); generateRecoverByIdMethod(implClass, tableName, introspectedTable, modelClassName, exampleClassName, mapperFieldName); generateRecoverAllMethod(implClass, tableName, introspectedTable, modelClassName, exampleClassName, mapperFieldName); - generateFindValidOneMethod(implClass, tableName, modelClassName, exampleClassName); - generateFindTrashOneMethod(implClass, tableName, modelClassName, exampleClassName); - generateGetValidListMethod(implClass, tableName, introspectedTable, modelClassName, exampleClassName, mapperFieldName, hasBLOBColumns); - generateGetTrashListMethod(implClass, tableName, introspectedTable, modelClassName, exampleClassName, mapperFieldName, hasBLOBColumns); - generateCountByValidMethod(implClass, tableName, introspectedTable, modelClassName, exampleClassName, mapperFieldName); - generateCountByValidWithPageMethod(implClass, tableName, modelClassName, exampleClassName, mapperFieldName); - generateCountByTrashMethod(implClass, tableName, introspectedTable, modelClassName, exampleClassName, mapperFieldName); - generateCountByTrashWithPageMethod(implClass, tableName, modelClassName, exampleClassName, mapperFieldName); + generateFindOneMethod(implClass, tableName, modelClassName, exampleClassName); + generateGetListMethod(implClass, tableName, introspectedTable, modelClassName, exampleClassName, mapperFieldName, hasBLOBColumns); + generateCountMethod(implClass, tableName, introspectedTable, modelClassName, exampleClassName, mapperFieldName); + generateCountWithPageMethod(implClass, tableName, modelClassName, exampleClassName, mapperFieldName); return implClass; } @@ -877,7 +837,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 = findAnyById(id);"); method.addBodyLine("if (aDo == null) {"); method.addBodyLine("return 0;"); method.addBodyLine("}"); @@ -927,10 +887,13 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "id")); method.addException(new FullyQualifiedJavaType("Throwable")); - method.addBodyLine(modelClassName + " aDo = findValidById(id);"); + method.addBodyLine(modelClassName + " aDo = findAnyById(id);"); method.addBodyLine("if (aDo == null) {"); method.addBodyLine("return 0;"); method.addBodyLine("}"); + method.addBodyLine("if (aDo.getIsHidden() == 1) {"); + method.addBodyLine("return 0;"); + method.addBodyLine("}"); method.addBodyLine(exampleClassName + " updateWhere"); method.addBodyLine(" = new " + exampleClassName + "();"); @@ -976,11 +939,11 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addParameter(new Parameter(new FullyQualifiedJavaType("long"), "id")); method.addException(new FullyQualifiedJavaType("Throwable")); - method.addBodyLine(modelClassName + " aDo = findTrashById(id);"); + method.addBodyLine(modelClassName + " aDo = findAnyById(id);"); method.addBodyLine("if (aDo == null) {"); method.addBodyLine("return 0;"); method.addBodyLine("}"); - method.addBodyLine("if (aDo.getIsDelete() == 1) {"); + method.addBodyLine("if (aDo.getIsHidden() == 0) {"); method.addBodyLine("return 0;"); method.addBodyLine("}"); @@ -1176,8 +1139,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addMethod(method); } - private void generateFindValidOneMethod(TopLevelClass implClass, String tableName, String modelClassName, String exampleClassName) { - Method method = new Method("findValidOne"); + private void generateFindOneMethod(TopLevelClass implClass, String tableName, String modelClassName, String exampleClassName) { + Method method = new Method("findOne"); method.addAnnotation("@Override"); method.setVisibility(JavaVisibility.PUBLIC); method.setReturnType(new FullyQualifiedJavaType(modelClassName)); @@ -1187,7 +1150,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("// clone new example"); method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("example.usePage(1, 1);"); - method.addBodyLine("List<" + modelClassName + "> dataList = getValidList(example);"); + method.addBodyLine("List<" + modelClassName + "> dataList = getList(example);"); method.addBodyLine("if (dataList != null && !dataList.isEmpty()) {"); method.addBodyLine("return dataList.get(0);"); method.addBodyLine("}"); @@ -1196,29 +1159,9 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addMethod(method); } - private void generateFindTrashOneMethod(TopLevelClass implClass, String tableName, 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("// clone new example"); - method.addBodyLine("example = example.cloneExample();"); - method.addBodyLine("example.usePage(1, 1);"); - method.addBodyLine("List<" + modelClassName + "> dataList = getTrashList(example);"); - method.addBodyLine("if (dataList != null && !dataList.isEmpty()) {"); - method.addBodyLine("return dataList.get(0);"); - method.addBodyLine("}"); - method.addBodyLine("return null;"); - - implClass.addMethod(method); - } - - private void generateGetValidListMethod(TopLevelClass implClass, String tableName, IntrospectedTable introspectedTable, String modelClassName, String exampleClassName, - String mapperFieldName, boolean hasBLOBColumns) { - Method method = new Method("getValidList"); + private void generateGetListMethod(TopLevelClass implClass, String tableName, IntrospectedTable introspectedTable, String modelClassName, String exampleClassName, + String mapperFieldName, boolean hasBLOBColumns) { + Method method = new Method("getList"); method.addAnnotation("@Override"); method.setVisibility(JavaVisibility.PUBLIC); method.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">")); @@ -1228,7 +1171,15 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("// clone new example"); method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(0);"); + method.addBodyLine("if (example.isResultTrash()) {"); + method.addBodyLine("criteria.andIsHiddenEqualTo(1)"); + method.addBodyLine(" .andIsDeleteEqualTo(0);"); + method.addBodyLine("} else if (example.isResultValid()) {"); + method.addBodyLine("criteria.andIsHiddenEqualTo(0)"); + method.addBodyLine(" .andIsDeleteEqualTo(0);"); + method.addBodyLine("} else {"); + method.addBodyLine("criteria.andIsDeleteEqualTo(0);"); + method.addBodyLine("}"); method.addBodyLine("}"); method.addBodyLine("List<" + modelClassName + "> result = null;"); method.addBodyLine("long startTime = new Date().getTime();"); @@ -1250,7 +1201,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." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " valid list primary key long time\" +"); + method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " list primary key long time\" +"); method.addBodyLine(" \"\\n\\t|-> table name: " + tableName + "\" +"); method.addBodyLine(" \"\\n\\t|-> use time: \" + findPrimaryKeyTime + \"ms\" +"); method.addBodyLine(" exampleString +"); @@ -1286,7 +1237,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." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " valid list long time\" +"); + method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " list long time\" +"); method.addBodyLine(" \"\\n\\t|-> table name: " + tableName + "\" +"); method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" exampleString +"); @@ -1297,89 +1248,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addMethod(method); } - private void generateGetTrashListMethod(TopLevelClass implClass, String tableName, IntrospectedTable introspectedTable, String modelClassName, String exampleClassName, - String mapperFieldName, boolean hasBLOBColumns) { - Method method = new Method("getTrashList"); - method.addAnnotation("@Override"); - method.setVisibility(JavaVisibility.PUBLIC); - method.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">")); - method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example")); - method.addException(new FullyQualifiedJavaType("Throwable")); - - method.addBodyLine("// clone new example"); - method.addBodyLine("example = example.cloneExample();"); - method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(1);"); - method.addBodyLine("}"); - method.addBodyLine("List<" + modelClassName + "> result = null;"); - method.addBodyLine("long startTime = new Date().getTime();"); - if (hasBLOBColumns) { - method.addBodyLine("if (example.getRows() != null && example.getOffset() != null) {"); - method.addBodyLine("List primaryKeyList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);"); - method.addBodyLine("if (primaryKeyList == null || primaryKeyList.isEmpty()) {"); - method.addBodyLine("return new ArrayList<>();"); - method.addBodyLine("}"); - method.addBodyLine("long findPrimaryKeyTime = new Date().getTime() - startTime;"); - method.addBodyLine("if (findPrimaryKeyTime > " + getSlowQueryLoggerTime(introspectedTable) + ") {"); - 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("if (example.getLimitString() != null) {"); - method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); - method.addBodyLine("}"); - method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " trash list primary key long time\" +"); - method.addBodyLine(" \"\\n\\t|-> table name: " + tableName + "\" +"); - method.addBodyLine(" \"\\n\\t|-> use time: \" + findPrimaryKeyTime + \"ms\" +"); - method.addBodyLine(" exampleString +"); - method.addBodyLine(" \"\\n\\t|-----------------------------------\""); - method.addBodyLine(");"); - method.addBodyLine("}"); - method.addBodyLine("// reset start time"); - method.addBodyLine("startTime = new Date().getTime();"); - method.addBodyLine("String oldOrderByClause = example.getOrderByClause();"); - method.addBodyLine("Boolean withBLOBsFlag = example.isWithBLOBs();"); - method.addBodyLine("example = new " + exampleClassName + "();"); - method.addBodyLine("example.createCriteria().andGuidIn(primaryKeyList);"); - method.addBodyLine("example.setOrderByClause(oldOrderByClause);"); - method.addBodyLine("example.setWithBLOBs(withBLOBsFlag);"); - method.addBodyLine("}"); - method.addBodyLine("if (example.isWithBLOBs()) {"); - method.addBodyLine("result = " + mapperFieldName + ".selectByExampleWithBLOBs(example);"); - method.addBodyLine("} else {"); - method.addBodyLine("result = " + mapperFieldName + ".selectByExample(example);"); - method.addBodyLine("}"); - } else { - method.addBodyLine("result = " + mapperFieldName + ".selectByExample(example);"); - } - method.addBodyLine("long useTime = new Date().getTime() - startTime;"); - method.addBodyLine("if (useTime > " + getSlowQueryLoggerTime(introspectedTable) + ") {"); - 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("if (example.getLimitString() != null) {"); - method.addBodyLine("exampleString += \"\\n\\t|-> limit: \" + example.getLimitString();"); - method.addBodyLine("}"); - method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " trash list long time\" +"); - method.addBodyLine(" \"\\n\\t|-> table name: " + tableName + "\" +"); - method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); - method.addBodyLine(" exampleString +"); - method.addBodyLine(" \"\\n\\t|-----------------------------------\""); - method.addBodyLine(");"); - method.addBodyLine("}"); - method.addBodyLine("return result;"); - implClass.addMethod(method); - } - - private void generateCountByValidMethod(TopLevelClass implClass, String tableName, IntrospectedTable introspectedTable, String modelClassName, String exampleClassName, String mapperFieldName) { - Method method = new Method("countByValid"); + private void generateCountMethod(TopLevelClass implClass, String tableName, IntrospectedTable introspectedTable, String modelClassName, String exampleClassName, String mapperFieldName) { + Method method = new Method("count"); method.addAnnotation("@Override"); method.setVisibility(JavaVisibility.PUBLIC); method.setReturnType(new FullyQualifiedJavaType("long")); @@ -1389,7 +1259,15 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("// clone new example"); method.addBodyLine("example = example.cloneExample();"); method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(0);"); + method.addBodyLine("if (example.isResultTrash()) {"); + method.addBodyLine("criteria.andIsHiddenEqualTo(1)"); + method.addBodyLine(" .andIsDeleteEqualTo(0);"); + method.addBodyLine("} else if (example.isResultValid()) {"); + method.addBodyLine("criteria.andIsHiddenEqualTo(0)"); + method.addBodyLine(" .andIsDeleteEqualTo(0);"); + method.addBodyLine("} else {"); + method.addBodyLine("criteria.andIsDeleteEqualTo(0);"); + method.addBodyLine("}"); method.addBodyLine("}"); method.addBodyLine("long startTime = new Date().getTime();"); method.addBodyLine("long count = " + mapperFieldName + ".countByExample(example);"); @@ -1402,7 +1280,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { method.addBodyLine("if (example.getOrderByClause() != null) {"); method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();"); method.addBodyLine("}"); - method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " valid count long time\" +"); + method.addBodyLine("LOGGER." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " count long time\" +"); method.addBodyLine(" \"\\n\\t|-> table name: " + tableName + "\" +"); method.addBodyLine(" \"\\n\\t|-> use time: \" + useTime + \"ms\" +"); method.addBodyLine(" exampleString +"); @@ -1414,8 +1292,8 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { implClass.addMethod(method); } - private void generateCountByValidWithPageMethod(TopLevelClass implClass, String tableName, String modelClassName, String exampleClassName, String mapperFieldName) { - Method method = new Method("countByValidWithPage"); + private void generateCountWithPageMethod(TopLevelClass implClass, String tableName, String modelClassName, String exampleClassName, String mapperFieldName) { + Method method = new Method("countWithPage"); method.addAnnotation("@Override"); method.setVisibility(JavaVisibility.PUBLIC); method.setReturnType(new FullyQualifiedJavaType("long")); @@ -1424,60 +1302,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { 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 tableName, IntrospectedTable introspectedTable, 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("// clone new example"); - method.addBodyLine("example = example.cloneExample();"); - method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {"); - method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(1);"); - method.addBodyLine("}"); - 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 > " + getSlowQueryLoggerTime(introspectedTable) + ") {"); - 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." + getSlowQueryLoggerLevel(introspectedTable) + "(\"[SQL] select " + modelClassName + " trash count long time\" +"); - method.addBodyLine(" \"\\n\\t|-> table name: " + tableName + "\" +"); - 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 tableName, 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("return count(example);"); method.addBodyLine("}"); method.addBodyLine("return 0L;");