diff --git a/pom.xml b/pom.xml
index a0fbe36..a0238e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -55,19 +55,6 @@
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- 3.2.0
-
-
- attach-javadocs
-
- jar
-
-
-
-
org.apache.maven.plugins
maven-gpg-plugin
diff --git a/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar b/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar
index f7aabf6..9520642 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/TapeMybatisGeneratorPlugin.java b/src/main/java/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.java
index 6804699..e7214c0 100644
--- a/src/main/java/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.java
+++ b/src/main/java/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.java
@@ -1,15 +1,296 @@
package com.iqudoo.framework.mybatis;
-import com.iqudoo.framework.mybatis.abstracts.AbstractWithLimitPlugin;
+import com.iqudoo.framework.mybatis.utils.ElementTools;
+import com.iqudoo.framework.mybatis.utils.FormatTools;
import org.mybatis.generator.api.IntrospectedTable;
+import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.*;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.Document;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;
+import org.mybatis.generator.internal.util.StringUtility;
+
+import java.util.List;
+import java.util.Properties;
@SuppressWarnings("unused")
-public class TapeMybatisGeneratorPlugin extends AbstractWithLimitPlugin {
+public class TapeMybatisGeneratorPlugin extends PluginAdapter {
+
+ private final static int DEFAULT_START_PAGE = 1;
+ private final static int DEFAULT_PAGE_SIZE = 20;
+ private final static int DEFAULT_IGNORE_PAGE_SIZE = 10000;
+ private int startPage = DEFAULT_START_PAGE;
+ private int defaultPageSize = DEFAULT_PAGE_SIZE;
+ private int ignorePageSize = DEFAULT_IGNORE_PAGE_SIZE;
+
+ @Override
+ public void setProperties(Properties properties) {
+ super.setProperties(properties);
+ if (StringUtility.stringHasValue(properties.getProperty("startPage"))) {
+ try {
+ startPage = Integer.parseInt(properties.getProperty("startPage"));
+ } catch (Throwable ignored) {
+ startPage = DEFAULT_START_PAGE;
+ }
+ }
+ if (StringUtility.stringHasValue(properties.getProperty("defaultPageSize"))) {
+ try {
+ defaultPageSize = Integer.parseInt(properties.getProperty("defaultPageSize"));
+ } catch (Throwable ignored) {
+ defaultPageSize = DEFAULT_PAGE_SIZE;
+ }
+ }
+ if (StringUtility.stringHasValue(properties.getProperty("ignorePageSize"))) {
+ try {
+ ignorePageSize = Integer.parseInt(properties.getProperty("ignorePageSize"));
+ } catch (Throwable ignored) {
+ ignorePageSize = DEFAULT_IGNORE_PAGE_SIZE;
+ }
+ }
+ }
+
+ @Override
+ public boolean validate(List list) {
+ return true;
+ }
+
+ @Override
+ public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+ PrimitiveTypeWrapper integerWrapper = FullyQualifiedJavaType.getIntInstance().getPrimitiveTypeWrapper();
+ // 添加 minPageNum、defaultPageSize、maxPageSize、ignorePageSize 字段
+ Field maxPageSizeField = ElementTools.generateField(
+ "maxPageSize",
+ JavaVisibility.PROTECTED,
+ integerWrapper,
+ "100"
+ );
+ topLevelClass.addField(maxPageSizeField);
+
+ Field ignorePageSizeField = ElementTools.generateField(
+ "ignorePageSize",
+ JavaVisibility.PROTECTED,
+ integerWrapper,
+ this.ignorePageSize + ""
+ );
+ topLevelClass.addField(ignorePageSizeField);
+
+ Field defaultPageSizeField = ElementTools.generateField(
+ "defaultPageSize",
+ JavaVisibility.PROTECTED,
+ integerWrapper,
+ defaultPageSize + ""
+ );
+ topLevelClass.addField(defaultPageSizeField);
+
+ Field minPageNumField = ElementTools.generateField(
+ "minPageNum",
+ JavaVisibility.PROTECTED,
+ integerWrapper,
+ startPage + ""
+ );
+ topLevelClass.addField(minPageNumField);
+
+ // 添加offset和rows字段
+ Field offsetField = ElementTools.generateField(
+ "offset",
+ JavaVisibility.PROTECTED,
+ integerWrapper,
+ "null"
+ );
+ topLevelClass.addField(offsetField);
+
+ Field rowsField = ElementTools.generateField(
+ "rows",
+ JavaVisibility.PROTECTED,
+ integerWrapper,
+ "null"
+ );
+ topLevelClass.addField(rowsField);
+
+ boolean hasBLOBColumns = ElementTools.hasBLOBColumns(introspectedTable);
+
+ if (hasBLOBColumns) {
+ Field withBLOBsField = ElementTools.generateField(
+ "withBLOBs",
+ JavaVisibility.PROTECTED,
+ new FullyQualifiedJavaType("java.lang.Boolean"),
+ "true"
+ );
+ topLevelClass.addField(withBLOBsField);
+ Method mSetWithBLOBs = ElementTools.generateSetterMethod(withBLOBsField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mSetWithBLOBs);
+ Method isWithBLOBsMethod = new Method("isWithBLOBs");
+ isWithBLOBsMethod.setVisibility(JavaVisibility.PUBLIC);
+ isWithBLOBsMethod.setReturnType(new FullyQualifiedJavaType("boolean"));
+ isWithBLOBsMethod.addBodyLine("return this.withBLOBs != null && this.withBLOBs;");
+ FormatTools.addMethodWithBestPosition(topLevelClass, isWithBLOBsMethod);
+ }
+
+
+ // 增加getter && setter 方法
+ Method mSetMaxPageSize = ElementTools.generateSetterMethod(maxPageSizeField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mSetMaxPageSize);
+
+ Method mGetMaxPageSize = ElementTools.generateGetterMethod(maxPageSizeField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mGetMaxPageSize);
+
+ Method mSetIgnorePageSize = ElementTools.generateSetterMethod(ignorePageSizeField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mSetIgnorePageSize);
+
+ Method mGetIgnorePageSize = ElementTools.generateGetterMethod(ignorePageSizeField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mGetIgnorePageSize);
+
+ Method mSetDefaultPageSize = ElementTools.generateSetterMethod(defaultPageSizeField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mSetDefaultPageSize);
+
+ Method mGetDefaultPageSize = ElementTools.generateGetterMethod(defaultPageSizeField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mGetDefaultPageSize);
+
+ Method mSetMinPageNum = ElementTools.generateSetterMethod(minPageNumField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mSetMinPageNum);
+
+ Method mGetMinPageNum = ElementTools.generateGetterMethod(minPageNumField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mGetMinPageNum);
+
+ Method mSetOffset = ElementTools.generateSetterMethod(offsetField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mSetOffset);
+
+ Method mGetOffset = ElementTools.generateGetterMethod(offsetField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mGetOffset);
+
+ Method mSetRows = ElementTools.generateSetterMethod(rowsField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mSetRows);
+
+ Method mGetRows = ElementTools.generateGetterMethod(rowsField);
+ FormatTools.addMethodWithBestPosition(topLevelClass, mGetRows);
+
+ // 提供几个快捷方法
+ Method setLimit = ElementTools.generateMethod(
+ "limit",
+ JavaVisibility.PUBLIC,
+ topLevelClass.getType(),
+ new Parameter(integerWrapper, "rows")
+ );
+ setLimit = ElementTools.generateMethodBody(
+ setLimit,
+ "this.offset = null;",
+ "this.rows = rows;",
+ "return this;"
+ );
+ FormatTools.addMethodWithBestPosition(topLevelClass, setLimit);
+
+ Method setLimit2 = ElementTools.generateMethod(
+ "limit",
+ JavaVisibility.PUBLIC,
+ topLevelClass.getType(),
+ new Parameter(integerWrapper, "offset"),
+ new Parameter(integerWrapper, "rows")
+ );
+ setLimit2 = ElementTools.generateMethodBody(
+ setLimit2,
+ "this.offset = offset;",
+ "this.rows = rows;",
+ "return this;"
+ );
+ FormatTools.addMethodWithBestPosition(topLevelClass, setLimit2);
+
+ Method usePage = ElementTools.generateMethod(
+ "usePage",
+ JavaVisibility.PUBLIC,
+ topLevelClass.getType(),
+ new Parameter(integerWrapper, "pageNum"),
+ new Parameter(integerWrapper, "pageSize")
+ );
+ usePage = ElementTools.generateMethodBody(
+ usePage,
+ "pageSize = pageSize == null || pageSize <= 0 ? this.defaultPageSize : pageSize;",
+ "pageNum = pageNum == null || pageNum < this.minPageNum ? this.minPageNum : pageNum;",
+ "if (pageSize >= this.ignorePageSize) {",
+ "this.rows = null;",
+ "this.offset = null;",
+ "return this;",
+ "}",
+ "int cPageSize = pageSize > this.maxPageSize ? this.maxPageSize: pageSize;",
+ "this.offset = (pageNum - this.minPageNum) * cPageSize;",
+ "this.rows = cPageSize;",
+ "return this;"
+ );
+ FormatTools.addMethodWithBestPosition(topLevelClass, usePage);
+
+ // 计算获取当前页码
+ Method getPageNum = ElementTools.generateMethod(
+ "getPageNum",
+ JavaVisibility.PUBLIC,
+ integerWrapper
+ );
+ getPageNum = ElementTools.generateMethodBody(
+ getPageNum,
+ "if (this.rows == null || this.offset == null || this.rows == 0) {",
+ "return this.minPageNum;",
+ "}",
+ "return this.offset / this.rows + this.minPageNum;"
+ );
+ FormatTools.addMethodWithBestPosition(topLevelClass, getPageNum);
+ // 计算获取当前每页数量
+ Method getPageSize = ElementTools.generateMethod(
+ "getPageSize",
+ JavaVisibility.PUBLIC,
+ integerWrapper
+ );
+ getPageSize = ElementTools.generateMethodBody(
+ getPageSize,
+ "if (this.rows == null) {",
+ "return this.ignorePageSize;",
+ "}",
+ "return this.rows;"
+ );
+ FormatTools.addMethodWithBestPosition(topLevelClass, getPageSize);
+
+ // !!! clear 方法增加 offset 和 rows的清理
+ List methodList = topLevelClass.getMethods();
+ for (Method method : methodList) {
+ if (method.getName().equals("clear")) {
+ method.addBodyLine("rows = null;");
+ method.addBodyLine("offset = null;");
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean sqlMapSelectAllElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
+ this.generateLimitElement(element);
+ return super.sqlMapSelectAllElementGenerated(element, introspectedTable);
+ }
+
+ @Override
+ public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
+ this.generateLimitElement(element);
+ return super.sqlMapSelectByExampleWithoutBLOBsElementGenerated(element, introspectedTable);
+ }
+
+ @Override
+ public boolean sqlMapSelectByExampleWithBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
+ this.generateLimitElement(element);
+ return super.sqlMapSelectByExampleWithBLOBsElementGenerated(element, introspectedTable);
+ }
+
+ public void generateLimitElement(XmlElement element) {
+ XmlElement ifLimitNotNullElement = new XmlElement("if");
+ ifLimitNotNullElement.addAttribute(new Attribute("test", "rows != null"));
+ // rows
+ XmlElement ifOffsetNotNullElement = new XmlElement("if");
+ ifOffsetNotNullElement.addAttribute(new Attribute("test", "offset != null"));
+ ifOffsetNotNullElement.addElement(new TextElement("limit ${offset}, ${rows}"));
+ ifLimitNotNullElement.addElement(ifOffsetNotNullElement);
+ // offset
+ XmlElement ifOffsetNullElement = new XmlElement("if");
+ ifOffsetNullElement.addAttribute(new Attribute("test", "offset == null"));
+ ifOffsetNullElement.addElement(new TextElement("limit ${rows}"));
+ ifLimitNotNullElement.addElement(ifOffsetNullElement);
+ element.addElement(ifLimitNotNullElement);
+ }
// ============================================ selectPrimaryKeyByExample ==========================================
@@ -87,5 +368,4 @@ public class TapeMybatisGeneratorPlugin extends AbstractWithLimitPlugin {
return super.sqlMapDocumentGenerated(document, introspectedTable);
}
-
}
diff --git a/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java b/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java
index ada0eea..ed2a347 100644
--- a/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java
+++ b/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java
@@ -1,5 +1,6 @@
package com.iqudoo.framework.mybatis;
+import com.iqudoo.framework.mybatis.utils.ElementTools;
import org.mybatis.generator.api.*;
import org.mybatis.generator.api.dom.DefaultJavaFormatter;
import org.mybatis.generator.api.dom.java.*;
@@ -15,7 +16,7 @@ import java.util.Properties;
/**
* MyBatis Generator 1.4.1
*/
-@SuppressWarnings({"DuplicatedCode", "unused"})
+@SuppressWarnings({"DuplicatedCode", "unused", "SpellCheckingInspection"})
public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
// 固定配置项
@@ -92,7 +93,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
String mapperClassName = domainObjectName + "Mapper";
String repositoryInterfaceName = "I" + domainObjectName + "Repository";
String repositoryImplName = domainObjectName + "RepositoryImpl";
- boolean hasBLOBColumns = hasBLOBColumns(introspectedTable);
+ boolean hasBLOBColumns = ElementTools.hasBLOBColumns(introspectedTable);
// 生成Repository接口(核心修改:手动添加所有方法,不再继承父接口)
Interface repositoryInterface = generateRepositoryInterface(repositoryInterfaceName, domainObjectName, exampleClassName);
@@ -156,9 +157,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
repositoryInterface.addImportedType(new FullyQualifiedJavaType(modelPackage + "." + exampleClassName));
repositoryInterface.addImportedType(new FullyQualifiedJavaType("java.util.List"));
- // 定义方法参数名(首字母小写)
- String exampleParamName = lowerFirst(exampleClassName);
-
// 1. trashById
Method trashByIdMethod = new Method("trashById");
trashByIdMethod.setVisibility(JavaVisibility.PUBLIC);
@@ -172,7 +170,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
Method trashAllMethod = new Method("trashAll");
trashAllMethod.setVisibility(JavaVisibility.PUBLIC);
trashAllMethod.setReturnType(new FullyQualifiedJavaType("int"));
- trashAllMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ trashAllMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
trashAllMethod.addException(new FullyQualifiedJavaType("Throwable"));
trashAllMethod.setAbstract(true);
repositoryInterface.addMethod(trashAllMethod);
@@ -191,7 +189,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
Method deleteAllMethod = new Method("deleteAll");
deleteAllMethod.setVisibility(JavaVisibility.PUBLIC);
deleteAllMethod.setReturnType(new FullyQualifiedJavaType("int"));
- deleteAllMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ deleteAllMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
deleteAllMethod.addParameter(new Parameter(new FullyQualifiedJavaType("boolean"), "release"));
deleteAllMethod.addException(new FullyQualifiedJavaType("Throwable"));
deleteAllMethod.setAbstract(true);
@@ -210,7 +208,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
Method recoverAllMethod = new Method("recoverAll");
recoverAllMethod.setVisibility(JavaVisibility.PUBLIC);
recoverAllMethod.setReturnType(new FullyQualifiedJavaType("int"));
- recoverAllMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ recoverAllMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
recoverAllMethod.addException(new FullyQualifiedJavaType("Throwable"));
recoverAllMethod.setAbstract(true);
repositoryInterface.addMethod(recoverAllMethod);
@@ -246,7 +244,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
Method findValidOneMethod = new Method("findValidOne");
findValidOneMethod.setVisibility(JavaVisibility.PUBLIC);
findValidOneMethod.setReturnType(new FullyQualifiedJavaType(modelClassName));
- findValidOneMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ findValidOneMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
findValidOneMethod.addException(new FullyQualifiedJavaType("Throwable"));
findValidOneMethod.setAbstract(true);
repositoryInterface.addMethod(findValidOneMethod);
@@ -255,7 +253,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
Method findTrashOneMethod = new Method("findTrashOne");
findTrashOneMethod.setVisibility(JavaVisibility.PUBLIC);
findTrashOneMethod.setReturnType(new FullyQualifiedJavaType(modelClassName));
- findTrashOneMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ findTrashOneMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
findTrashOneMethod.addException(new FullyQualifiedJavaType("Throwable"));
findTrashOneMethod.setAbstract(true);
repositoryInterface.addMethod(findTrashOneMethod);
@@ -264,7 +262,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
Method getValidListMethod = new Method("getValidList");
getValidListMethod.setVisibility(JavaVisibility.PUBLIC);
getValidListMethod.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">"));
- getValidListMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ getValidListMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
getValidListMethod.addException(new FullyQualifiedJavaType("Throwable"));
getValidListMethod.setAbstract(true);
repositoryInterface.addMethod(getValidListMethod);
@@ -273,7 +271,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
Method getTrashListMethod = new Method("getTrashList");
getTrashListMethod.setVisibility(JavaVisibility.PUBLIC);
getTrashListMethod.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">"));
- getTrashListMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ getTrashListMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
getTrashListMethod.addException(new FullyQualifiedJavaType("Throwable"));
getTrashListMethod.setAbstract(true);
repositoryInterface.addMethod(getTrashListMethod);
@@ -282,7 +280,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
Method countByValidMethod = new Method("countByValid");
countByValidMethod.setVisibility(JavaVisibility.PUBLIC);
countByValidMethod.setReturnType(new FullyQualifiedJavaType("long"));
- countByValidMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ countByValidMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
countByValidMethod.addException(new FullyQualifiedJavaType("Throwable"));
countByValidMethod.setAbstract(true);
repositoryInterface.addMethod(countByValidMethod);
@@ -291,7 +289,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
Method countByTrashMethod = new Method("countByTrash");
countByTrashMethod.setVisibility(JavaVisibility.PUBLIC);
countByTrashMethod.setReturnType(new FullyQualifiedJavaType("long"));
- countByTrashMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ countByTrashMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
countByTrashMethod.addException(new FullyQualifiedJavaType("Throwable"));
countByTrashMethod.setAbstract(true);
repositoryInterface.addMethod(countByTrashMethod);
@@ -373,22 +371,21 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addAnnotation("@Override");
method.setVisibility(JavaVisibility.PUBLIC);
method.setReturnType(new FullyQualifiedJavaType("int"));
- String exampleParamName = lowerFirst(exampleClassName);
- method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
method.addParameter(new Parameter(new FullyQualifiedJavaType("boolean"), "release"));
method.addException(new FullyQualifiedJavaType("Throwable"));
// 方法体
method.addBodyLine("if (release) {");
- method.addBodyLine(" return " + mapperFieldName + ".deleteByExample(" + exampleParamName + ");");
+ method.addBodyLine("return " + mapperFieldName + ".deleteByExample(example);");
method.addBodyLine("}");
- method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : " + exampleParamName + ".getOredCriteria()) {");
- method.addBodyLine(" criteria.andIsDeleteEqualTo(0);");
+ method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {");
+ method.addBodyLine("criteria.andIsDeleteEqualTo(0);");
method.addBodyLine("}");
method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();");
method.addBodyLine(lowerFirst(modelClassName) + ".setIsDelete(1);");
method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());");
- method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", " + exampleParamName + ");");
+ method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);");
implClass.addMethod(method);
}
@@ -398,20 +395,19 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addAnnotation("@Override");
method.setVisibility(JavaVisibility.PUBLIC);
method.setReturnType(new FullyQualifiedJavaType("int"));
- String exampleParamName = lowerFirst(exampleClassName);
- method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
method.addException(new FullyQualifiedJavaType("Throwable"));
// 方法体
- method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : " + exampleParamName + ".getOredCriteria()) {");
- method.addBodyLine(" criteria.andIsDeleteEqualTo(0);");
- method.addBodyLine(" criteria.andIsHiddenEqualTo(0);");
+ method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {");
+ method.addBodyLine("criteria.andIsDeleteEqualTo(0);");
+ method.addBodyLine("criteria.andIsHiddenEqualTo(0);");
method.addBodyLine("}");
method.addBodyLine(modelClassName + " " + lowerFirst(modelClassName) + " = new " + modelClassName + "();");
method.addBodyLine(lowerFirst(modelClassName) + ".setIsHidden(1);");
method.addBodyLine(lowerFirst(modelClassName) + ".setDeleteToken(" + lowerFirst(modelClassName) + ".getGuid() + \"\");");
method.addBodyLine(lowerFirst(modelClassName) + ".setUpdateTime(new Date());");
- method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", " + exampleParamName + ");");
+ method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);");
implClass.addMethod(method);
}
@@ -421,20 +417,19 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addAnnotation("@Override");
method.setVisibility(JavaVisibility.PUBLIC);
method.setReturnType(new FullyQualifiedJavaType("int"));
- String exampleParamName = lowerFirst(exampleClassName);
- method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
method.addException(new FullyQualifiedJavaType("Throwable"));
// 方法体
- method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : " + exampleParamName + ".getOredCriteria()) {");
- method.addBodyLine(" criteria.andIsDeleteEqualTo(0);");
- method.addBodyLine(" criteria.andIsHiddenEqualTo(1);");
+ method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {");
+ method.addBodyLine("criteria.andIsDeleteEqualTo(0);");
+ method.addBodyLine("criteria.andIsHiddenEqualTo(1);");
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());");
- method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", " + exampleParamName + ");");
+ method.addBodyLine("return " + mapperFieldName + ".updateByExampleSelective(" + lowerFirst(modelClassName) + ", example);");
implClass.addMethod(method);
}
@@ -480,15 +475,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
}
}
- private boolean hasBLOBColumns(IntrospectedTable introspectedTable) {
- for (IntrospectedColumn column : introspectedTable.getAllColumns()) {
- if (column.isBLOBColumn()) {
- return true;
- }
- }
- return false;
- }
-
private void addImportPackages(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperClassName, String interfaceName) {
implClass.addImportedType(new FullyQualifiedJavaType(snowflakeUtilClass));
implClass.addImportedType(new FullyQualifiedJavaType(mapperPackage + "." + mapperClassName));
@@ -512,7 +498,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine(modelClassName + " aDo = " + mapperFieldName + ".selectByPrimaryKey(id);");
method.addBodyLine("if (aDo != null && aDo.getIsDelete() == 1) {");
- method.addBodyLine(" return null;");
+ method.addBodyLine("return null;");
method.addBodyLine("}");
method.addBodyLine("return aDo;");
@@ -529,7 +515,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine(modelClassName + " aDo = " + mapperFieldName + ".selectByPrimaryKey(id);");
method.addBodyLine("if (aDo != null && (aDo.getIsDelete() == 1 || aDo.getIsHidden() == 1)) {");
- method.addBodyLine(" return null;");
+ method.addBodyLine("return null;");
method.addBodyLine("}");
method.addBodyLine("return aDo;");
@@ -546,7 +532,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine(modelClassName + " aDo = " + mapperFieldName + ".selectByPrimaryKey(id);");
method.addBodyLine("if (aDo != null && (aDo.getIsDelete() == 1 || aDo.getIsHidden() == 0)) {");
- method.addBodyLine(" return null;");
+ method.addBodyLine("return null;");
method.addBodyLine("}");
method.addBodyLine("return aDo;");
@@ -563,10 +549,10 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine(modelClassName + " aDo = new " + modelClassName + "();");
method.addBodyLine("if (record.getGuid() != null) {");
- method.addBodyLine(" aDo.setGuid(record.getGuid());");
+ method.addBodyLine("aDo.setGuid(record.getGuid());");
method.addBodyLine("} else {");
- method.addBodyLine(" Long guid = " + snowflakeUtilGenId + ";");
- method.addBodyLine(" aDo.setGuid(guid);");
+ method.addBodyLine("Long guid = " + snowflakeUtilGenId + ";");
+ method.addBodyLine("aDo.setGuid(guid);");
method.addBodyLine("}");
for (IntrospectedColumn column : introspectedTable.getAllColumns()) {
@@ -591,7 +577,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine("int count = " + mapperFieldName + ".insert(aDo);");
method.addBodyLine("if (count > 0) {");
- method.addBodyLine(" return aDo;");
+ method.addBodyLine("return aDo;");
method.addBodyLine("}");
method.addBodyLine("// optimistic locking with data version and guid");
@@ -615,7 +601,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine(modelClassName + " aDo = findValidById(record.getGuid());");
method.addBodyLine("if (aDo == null) {");
- method.addBodyLine(" throw new Throwable(\"Database record not found, " + modelClassName + " GUID:\" + record.getGuid());");
+ method.addBodyLine("throw new Throwable(\"Database record not found, " + modelClassName + " GUID:\" + record.getGuid());");
method.addBodyLine("}");
for (IntrospectedColumn column : introspectedTable.getAllColumns()) {
@@ -629,18 +615,18 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
continue;
}
method.addBodyLine("if (record." + getterMethod + "() != null) {");
- method.addBodyLine(" aDo." + setterMethod + "(record." + getterMethod + "());");
+ method.addBodyLine("aDo." + setterMethod + "(record." + getterMethod + "());");
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("lockDataVersion = aDo.getDataVersion();");
method.addBodyLine("}");
method.addBodyLine("updateWhere.createCriteria()");
- method.addBodyLine(" .andGuidEqualTo(aDo.getGuid())");
- method.addBodyLine(" .andDataVersionEqualTo(lockDataVersion);");
+ method.addBodyLine(".andGuidEqualTo(aDo.getGuid())");
+ method.addBodyLine(".andDataVersionEqualTo(lockDataVersion);");
method.addBodyLine("aDo.setDataVersion(aDo.getDataVersion() + 1);");
method.addBodyLine("aDo.setUpdateTime(new Date());");
method.addBodyLine("// update data version");
@@ -664,10 +650,10 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine(modelClassName + " aDo = findValidById(id);");
method.addBodyLine("if (aDo == null) {");
- method.addBodyLine(" return 0;");
+ method.addBodyLine("return 0;");
method.addBodyLine("}");
method.addBodyLine("if (release) {");
- method.addBodyLine(" return " + mapperFieldName + ".deleteByPrimaryKey(aDo.getGuid());");
+ method.addBodyLine("return " + mapperFieldName + ".deleteByPrimaryKey(aDo.getGuid());");
method.addBodyLine("}");
method.addBodyLine("aDo.setIsDelete(1);");
method.addBodyLine("aDo.setUpdateTime(new Date());");
@@ -686,7 +672,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine(modelClassName + " aDo = findValidById(id);");
method.addBodyLine("if (aDo == null) {");
- method.addBodyLine(" return 0;");
+ method.addBodyLine("return 0;");
method.addBodyLine("}");
method.addBodyLine("aDo.setIsHidden(1);");
method.addBodyLine("aDo.setDeleteToken(aDo.getGuid() + \"\");");
@@ -706,10 +692,10 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addBodyLine(modelClassName + " aDo = findTrashById(id);");
method.addBodyLine("if (aDo == null) {");
- method.addBodyLine(" return 0;");
+ method.addBodyLine("return 0;");
method.addBodyLine("}");
method.addBodyLine("if (aDo.getIsDelete() == 1) {");
- method.addBodyLine(" return 0;");
+ method.addBodyLine("return 0;");
method.addBodyLine("}");
method.addBodyLine("aDo.setIsHidden(0);");
method.addBodyLine("aDo.setDeleteToken(\"VALID\");");
@@ -724,14 +710,13 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addAnnotation("@Override");
method.setVisibility(JavaVisibility.PUBLIC);
method.setReturnType(new FullyQualifiedJavaType(modelClassName));
- String exampleParamName = exampleClassName.substring(0, 1).toLowerCase() + exampleClassName.substring(1);
- method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
method.addException(new FullyQualifiedJavaType("Throwable"));
- method.addBodyLine(exampleParamName + ".usePage(1, 1);");
- method.addBodyLine("List<" + modelClassName + "> dataList = getValidList(" + exampleParamName + ");");
- method.addBodyLine("if (dataList != null && dataList.size() > 0) {");
- method.addBodyLine(" return dataList.get(0);");
+ 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;");
@@ -743,14 +728,13 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addAnnotation("@Override");
method.setVisibility(JavaVisibility.PUBLIC);
method.setReturnType(new FullyQualifiedJavaType(modelClassName));
- String exampleParamName = exampleClassName.substring(0, 1).toLowerCase() + exampleClassName.substring(1);
- method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
method.addException(new FullyQualifiedJavaType("Throwable"));
- method.addBodyLine(exampleParamName + ".usePage(1, 1);");
- method.addBodyLine("List<" + modelClassName + "> dataList = getTrashList(" + exampleParamName + ");");
- method.addBodyLine("if (dataList != null && dataList.size() > 0) {");
- method.addBodyLine(" return dataList.get(0);");
+ 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;");
@@ -767,23 +751,34 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addException(new FullyQualifiedJavaType("Throwable"));
method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {");
- method.addBodyLine(" criteria.andIsDeleteEqualTo(0)");
- method.addBodyLine(" .andIsHiddenEqualTo(0);");
+ method.addBodyLine("criteria.andIsDeleteEqualTo(0)");
+ method.addBodyLine(".andIsHiddenEqualTo(0);");
method.addBodyLine("}");
method.addBodyLine("if (example.getRows() != null && example.getOffset() != null) {");
- method.addBodyLine(" List primaryKeyList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);");
- method.addBodyLine(" if (primaryKeyList == null || primaryKeyList.size() == 0) {");
- method.addBodyLine(" return new ArrayList<>();");
- method.addBodyLine(" }");
- method.addBodyLine(" String oldOrderByClause = example.getOrderByClause();");
- method.addBodyLine(" example = new " + exampleClassName + "();");
- method.addBodyLine(" example.createCriteria().andGuidIn(primaryKeyList);");
- method.addBodyLine(" example.setOrderByClause(oldOrderByClause);");
+ method.addBodyLine("List primaryKeyList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);");
+ method.addBodyLine("if (primaryKeyList == null || primaryKeyList.isEmpty()) {");
+ method.addBodyLine("return new ArrayList<>();");
+ method.addBodyLine("}");
+ method.addBodyLine("String oldOrderByClause = example.getOrderByClause();");
+ if (hasBLOBColumns) {
+ method.addBodyLine("Boolean withBLOBsFlag = example.isWithBLOBs();");
+ }
+ method.addBodyLine("example = new " + exampleClassName + "();");
+ method.addBodyLine("example.createCriteria().andGuidIn(primaryKeyList);");
+ method.addBodyLine("example.setOrderByClause(oldOrderByClause);");
+ if (hasBLOBColumns) {
+ method.addBodyLine("example.setWithBLOBs(withBLOBsFlag);");
+ }
method.addBodyLine("}");
- String selectMethod = hasBLOBColumns ? "selectByExampleWithBLOBs" : "selectByExample";
- method.addBodyLine("return " + mapperFieldName + "." + selectMethod + "(example);");
-
+ if (hasBLOBColumns) {
+ method.addBodyLine("if (example.isWithBLOBs()) {");
+ method.addBodyLine("return " + mapperFieldName + ".selectByExampleWithBLOBs(example);");
+ method.addBodyLine("}");
+ method.addBodyLine("return " + mapperFieldName + ".selectByExample(example);");
+ } else {
+ method.addBodyLine("return " + mapperFieldName + ".selectByExample(example);");
+ }
implClass.addMethod(method);
}
@@ -797,23 +792,34 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addException(new FullyQualifiedJavaType("Throwable"));
method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {");
- method.addBodyLine(" criteria.andIsDeleteEqualTo(0)");
- method.addBodyLine(" .andIsHiddenEqualTo(1);");
+ method.addBodyLine("criteria.andIsDeleteEqualTo(0)");
+ method.addBodyLine(".andIsHiddenEqualTo(1);");
method.addBodyLine("}");
method.addBodyLine("if (example.getRows() != null && example.getOffset() != null) {");
- method.addBodyLine(" List primaryKeyList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);");
- method.addBodyLine(" if (primaryKeyList == null || primaryKeyList.size() == 0) {");
- method.addBodyLine(" return new ArrayList<>();");
- method.addBodyLine(" }");
- method.addBodyLine(" String oldOrderByClause = example.getOrderByClause();");
- method.addBodyLine(" example = new " + exampleClassName + "();");
- method.addBodyLine(" example.createCriteria().andGuidIn(primaryKeyList);");
- method.addBodyLine(" example.setOrderByClause(oldOrderByClause);");
+ method.addBodyLine("List primaryKeyList = " + mapperFieldName + ".selectPrimaryKeyByExample(example);");
+ method.addBodyLine("if (primaryKeyList == null || primaryKeyList.isEmpty()) {");
+ method.addBodyLine("return new ArrayList<>();");
+ method.addBodyLine("}");
+ method.addBodyLine("String oldOrderByClause = example.getOrderByClause();");
+ if (hasBLOBColumns) {
+ method.addBodyLine("Boolean withBLOBsFlag = example.isWithBLOBs();");
+ }
+ method.addBodyLine("example = new " + exampleClassName + "();");
+ method.addBodyLine("example.createCriteria().andGuidIn(primaryKeyList);");
+ method.addBodyLine("example.setOrderByClause(oldOrderByClause);");
+ if (hasBLOBColumns) {
+ method.addBodyLine("example.setWithBLOBs(withBLOBsFlag);");
+ }
method.addBodyLine("}");
- String selectMethod = hasBLOBColumns ? "selectByExampleWithBLOBs" : "selectByExample";
- method.addBodyLine("return " + mapperFieldName + "." + selectMethod + "(example);");
-
+ if (hasBLOBColumns) {
+ method.addBodyLine("if (example.isWithBLOBs()) {");
+ method.addBodyLine("return " + mapperFieldName + ".selectByExampleWithBLOBs(example);");
+ method.addBodyLine("}");
+ method.addBodyLine("return " + mapperFieldName + ".selectByExample(example);");
+ } else {
+ method.addBodyLine("return " + mapperFieldName + ".selectByExample(example);");
+ }
implClass.addMethod(method);
}
@@ -826,8 +832,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addException(new FullyQualifiedJavaType("Throwable"));
method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {");
- method.addBodyLine(" criteria.andIsDeleteEqualTo(0)");
- method.addBodyLine(" .andIsHiddenEqualTo(0);");
+ method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(0);");
method.addBodyLine("}");
method.addBodyLine("return " + mapperFieldName + ".countByExample(example);");
@@ -843,8 +848,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter {
method.addException(new FullyQualifiedJavaType("Throwable"));
method.addBodyLine("for (" + exampleClassName + ".Criteria criteria : example.getOredCriteria()) {");
- method.addBodyLine(" criteria.andIsDeleteEqualTo(0)");
- method.addBodyLine(" .andIsHiddenEqualTo(1);");
+ method.addBodyLine("criteria.andIsDeleteEqualTo(0).andIsHiddenEqualTo(1);");
method.addBodyLine("}");
method.addBodyLine("return " + mapperFieldName + ".countByExample(example);");
diff --git a/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java b/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java
index 75e4952..1c531e2 100644
--- a/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java
+++ b/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java
@@ -1,5 +1,6 @@
package com.iqudoo.framework.mybatis;
+import com.iqudoo.framework.mybatis.utils.ElementTools;
import org.mybatis.generator.api.GeneratedJavaFile;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.JavaFormatter;
@@ -18,7 +19,7 @@ import java.util.Properties;
/**
* MyBatis Generator 1.4.1 适配版:视图表专用 RepoView 生成插件
*/
-@SuppressWarnings("DuplicatedCode")
+@SuppressWarnings({"DuplicatedCode", "SpellCheckingInspection"})
public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
// 视图Repo包配置(可通过配置文件自定义)
@@ -90,6 +91,8 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
String repoInterfaceName = "I" + domainObjectName + "Repo";
String repoImplName = domainObjectName + "RepoImpl";
+ boolean hasBLOBColumns = ElementTools.hasBLOBColumns(introspectedTable);
+
// 2. 生成视图Repo接口(核心修改:移除继承,手动添加方法)
Interface repoInterface = generateRepoViewInterface(repoInterfaceName, domainObjectName, exampleClassName);
GeneratedJavaFile interfaceFile = new GeneratedJavaFile(
@@ -106,7 +109,8 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
repoInterfaceName,
domainObjectName,
exampleClassName,
- mapperClassName
+ mapperClassName,
+ hasBLOBColumns
);
GeneratedJavaFile implFile = new GeneratedJavaFile(
repoImpl,
@@ -151,14 +155,11 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
repoInterface.addImportedType(new FullyQualifiedJavaType(modelPackage + "." + exampleClassName));
repoInterface.addImportedType(new FullyQualifiedJavaType("java.util.List"));
- // 定义方法参数名(首字母小写)
- String exampleParamName = lowerFirst(exampleClassName);
-
// 1. 添加findOne方法
Method findOneMethod = new Method("findOne");
findOneMethod.setVisibility(JavaVisibility.PUBLIC);
findOneMethod.setReturnType(new FullyQualifiedJavaType(modelClassName));
- findOneMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ findOneMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
findOneMethod.addException(new FullyQualifiedJavaType("Throwable"));
findOneMethod.setAbstract(true);
repoInterface.addMethod(findOneMethod);
@@ -167,7 +168,7 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
Method getListMethod = new Method("getList");
getListMethod.setVisibility(JavaVisibility.PUBLIC);
getListMethod.setReturnType(new FullyQualifiedJavaType("List<" + modelClassName + ">"));
- getListMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ getListMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
getListMethod.addException(new FullyQualifiedJavaType("Throwable"));
getListMethod.setAbstract(true);
repoInterface.addMethod(getListMethod);
@@ -176,7 +177,7 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
Method countMethod = new Method("count");
countMethod.setVisibility(JavaVisibility.PUBLIC);
countMethod.setReturnType(new FullyQualifiedJavaType("long"));
- countMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ countMethod.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
countMethod.addException(new FullyQualifiedJavaType("Throwable"));
countMethod.setAbstract(true);
repoInterface.addMethod(countMethod);
@@ -192,7 +193,9 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
String interfaceName,
String modelClassName,
String exampleClassName,
- String mapperClassName) {
+ String mapperClassName,
+ boolean hasBLOBColumns
+ ) {
TopLevelClass implClass = new TopLevelClass(domainRepoviewPackage + "." + implClassName);
implClass.setVisibility(JavaVisibility.PUBLIC);
@@ -216,7 +219,7 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
// 生成findOne方法
generateFindOneMethod(implClass, modelClassName, exampleClassName, mapperFieldName);
// 生成getList方法
- generateGetListMethod(implClass, modelClassName, exampleClassName, mapperFieldName);
+ generateGetListMethod(implClass, modelClassName, exampleClassName, mapperFieldName, hasBLOBColumns);
// 生成count方法
generateCountMethod(implClass, exampleClassName, mapperFieldName);
@@ -249,15 +252,14 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
method.setVisibility(JavaVisibility.PUBLIC);
method.setReturnType(new FullyQualifiedJavaType(modelClassName));
// 参数名匹配示例(首字母小写)
- String exampleParamName = lowerFirst(exampleClassName);
- method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
method.addException(new FullyQualifiedJavaType("Throwable"));
// 方法体
- method.addBodyLine(exampleParamName + ".usePage(1, 1);");
- method.addBodyLine("List<" + modelClassName + "> dataList = getList(" + exampleParamName + ");");
- method.addBodyLine("if (dataList != null && dataList.size() > 0) {");
- method.addBodyLine(" return dataList.get(0);");
+ method.addBodyLine("example.usePage(1, 1);");
+ method.addBodyLine("List<" + modelClassName + "> dataList = getList(example);");
+ method.addBodyLine("if (dataList != null && !dataList.isEmpty()) {");
+ method.addBodyLine("return dataList.get(0);");
method.addBodyLine("}");
method.addBodyLine("return null;");
@@ -267,19 +269,22 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
/**
* 生成getList方法
*/
- private void generateGetListMethod(TopLevelClass implClass, String modelClassName, String exampleClassName, String mapperFieldName) {
+ private void generateGetListMethod(TopLevelClass implClass, 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 + ">"));
// 参数名匹配示例(首字母小写)
- String exampleParamName = lowerFirst(exampleClassName);
- method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
method.addException(new FullyQualifiedJavaType("Throwable"));
-
- // 方法体
- method.addBodyLine("return " + mapperFieldName + ".selectByExample(" + exampleParamName + ");");
-
+ if (hasBLOBColumns) {
+ method.addBodyLine("if (example.isWithBLOBs()) {");
+ method.addBodyLine("return " + mapperFieldName + ".selectByExampleWithBLOBs(example);");
+ method.addBodyLine("}");
+ method.addBodyLine("return " + mapperFieldName + ".selectByExample(example);");
+ } else {
+ method.addBodyLine("return " + mapperFieldName + ".selectByExample(example);");
+ }
implClass.addMethod(method);
}
@@ -292,12 +297,11 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
method.setVisibility(JavaVisibility.PUBLIC);
method.setReturnType(new FullyQualifiedJavaType("long"));
// 参数名匹配示例(首字母小写)
- String exampleParamName = lowerFirst(exampleClassName);
- method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), exampleParamName));
+ method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
method.addException(new FullyQualifiedJavaType("Throwable"));
// 方法体
- method.addBodyLine("return " + mapperFieldName + ".countByExample(" + exampleParamName + ");");
+ method.addBodyLine("return " + mapperFieldName + ".countByExample(example);");
implClass.addMethod(method);
}
@@ -355,14 +359,4 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
return str.substring(0, 1).toLowerCase() + str.substring(1);
}
- /**
- * 字符串首字母大写(备用)
- */
- private String upperFirst(String str) {
- if (str == null || str.isEmpty()) {
- return str;
- }
- return str.substring(0, 1).toUpperCase() + str.substring(1);
- }
-
}
\ No newline at end of file
diff --git a/src/main/java/com/iqudoo/framework/mybatis/abstracts/AbstractWithLimitPlugin.java b/src/main/java/com/iqudoo/framework/mybatis/abstracts/AbstractWithLimitPlugin.java
deleted file mode 100644
index 6316a14..0000000
--- a/src/main/java/com/iqudoo/framework/mybatis/abstracts/AbstractWithLimitPlugin.java
+++ /dev/null
@@ -1,261 +0,0 @@
-package com.iqudoo.framework.mybatis.abstracts;
-
-import com.iqudoo.framework.mybatis.hook.ISelectSelectivePluginHook;
-import com.iqudoo.framework.mybatis.utils.FormatTools;
-import com.iqudoo.framework.mybatis.utils.ElementTools;
-import org.mybatis.generator.api.IntrospectedTable;
-import org.mybatis.generator.api.PluginAdapter;
-import org.mybatis.generator.api.dom.java.*;
-import org.mybatis.generator.api.dom.xml.Attribute;
-import org.mybatis.generator.api.dom.xml.TextElement;
-import org.mybatis.generator.api.dom.xml.XmlElement;
-
-import java.util.List;
-
-public abstract class AbstractWithLimitPlugin extends PluginAdapter implements ISelectSelectivePluginHook {
-
- private final static int DEFAULT_START_PAGE = 1;
- private final static int DEFAULT_IGNORE_PAGE_SIZE = 10000;
- private int startPage = 1;
- private int ignorePageSize = DEFAULT_IGNORE_PAGE_SIZE;
-
- @Override
- public boolean validate(List list) {
- return true;
- }
-
- @Override
- public void initialized(IntrospectedTable introspectedTable) {
- super.initialized(introspectedTable);
- this.startPage = DEFAULT_START_PAGE;
- String ignorePageSizeProperty = this.properties.getProperty("ignorePageSize");
- if (ignorePageSizeProperty != null && ignorePageSizeProperty.trim().length() > 0) {
- try {
- this.ignorePageSize = Integer.parseInt(ignorePageSizeProperty.trim());
- } catch (NumberFormatException ignored) {
- this.ignorePageSize = DEFAULT_IGNORE_PAGE_SIZE;
- }
- } else {
- this.ignorePageSize = DEFAULT_IGNORE_PAGE_SIZE;
- }
- }
-
- @Override
- public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
- PrimitiveTypeWrapper integerWrapper = FullyQualifiedJavaType.getIntInstance().getPrimitiveTypeWrapper();
- // 添加 minPageNum、defaultPageSize、maxPageSize、ignorePageSize 字段
- Field maxPageSizeField = ElementTools.generateField(
- "maxPageSize",
- JavaVisibility.PROTECTED,
- integerWrapper,
- "100"
- );
- topLevelClass.addField(maxPageSizeField);
-
- Field ignorePageSizeField = ElementTools.generateField(
- "ignorePageSize",
- JavaVisibility.PROTECTED,
- integerWrapper,
- this.ignorePageSize + ""
- );
- topLevelClass.addField(ignorePageSizeField);
-
- Field defaultPageSizeField = ElementTools.generateField(
- "defaultPageSize",
- JavaVisibility.PROTECTED,
- integerWrapper,
- "20"
- );
- topLevelClass.addField(defaultPageSizeField);
-
- Field minPageNumField = ElementTools.generateField(
- "minPageNum",
- JavaVisibility.PROTECTED,
- integerWrapper,
- startPage + ""
- );
- topLevelClass.addField(minPageNumField);
-
- // 添加offset和rows字段
- Field offsetField = ElementTools.generateField(
- "offset",
- JavaVisibility.PROTECTED,
- integerWrapper,
- "null"
- );
- topLevelClass.addField(offsetField);
-
- Field rowsField = ElementTools.generateField(
- "rows",
- JavaVisibility.PROTECTED,
- integerWrapper,
- "null"
- );
- topLevelClass.addField(rowsField);
-
- // 增加getter && setter 方法
- Method mSetMaxPageSize = ElementTools.generateSetterMethod(maxPageSizeField);
- FormatTools.addMethodWithBestPosition(topLevelClass, mSetMaxPageSize);
-
- Method mGetMaxPageSize = ElementTools.generateGetterMethod(maxPageSizeField);
- FormatTools.addMethodWithBestPosition(topLevelClass, mGetMaxPageSize);
-
- Method mSetIgnorePageSize = ElementTools.generateSetterMethod(ignorePageSizeField);
- FormatTools.addMethodWithBestPosition(topLevelClass, mSetIgnorePageSize);
-
- Method mGetIgnorePageSize = ElementTools.generateGetterMethod(ignorePageSizeField);
- FormatTools.addMethodWithBestPosition(topLevelClass, mGetIgnorePageSize);
-
- Method mSetDefaultPageSize = ElementTools.generateSetterMethod(defaultPageSizeField);
- FormatTools.addMethodWithBestPosition(topLevelClass, mSetDefaultPageSize);
-
- Method mGetDefaultPageSize = ElementTools.generateGetterMethod(defaultPageSizeField);
- FormatTools.addMethodWithBestPosition(topLevelClass, mGetDefaultPageSize);
-
- Method mSetMinPageNum = ElementTools.generateSetterMethod(minPageNumField);
- FormatTools.addMethodWithBestPosition(topLevelClass, mSetMinPageNum);
-
- Method mGetMinPageNum = ElementTools.generateGetterMethod(minPageNumField);
- FormatTools.addMethodWithBestPosition(topLevelClass, mGetMinPageNum);
-
- Method mSetOffset = ElementTools.generateSetterMethod(offsetField);
- FormatTools.addMethodWithBestPosition(topLevelClass, mSetOffset);
-
- Method mGetOffset = ElementTools.generateGetterMethod(offsetField);
- FormatTools.addMethodWithBestPosition(topLevelClass, mGetOffset);
-
- Method mSetRows = ElementTools.generateSetterMethod(rowsField);
- FormatTools.addMethodWithBestPosition(topLevelClass, mSetRows);
-
- Method mGetRows = ElementTools.generateGetterMethod(rowsField);
- FormatTools.addMethodWithBestPosition(topLevelClass, mGetRows);
-
- // 提供几个快捷方法
- Method setLimit = ElementTools.generateMethod(
- "limit",
- JavaVisibility.PUBLIC,
- topLevelClass.getType(),
- new Parameter(integerWrapper, "rows")
- );
- setLimit = ElementTools.generateMethodBody(
- setLimit,
- "this.offset = null;",
- "this.rows = rows;",
- "return this;"
- );
- FormatTools.addMethodWithBestPosition(topLevelClass, setLimit);
-
- Method setLimit2 = ElementTools.generateMethod(
- "limit",
- JavaVisibility.PUBLIC,
- topLevelClass.getType(),
- new Parameter(integerWrapper, "offset"),
- new Parameter(integerWrapper, "rows")
- );
- setLimit2 = ElementTools.generateMethodBody(
- setLimit2,
- "this.offset = offset;",
- "this.rows = rows;",
- "return this;"
- );
- FormatTools.addMethodWithBestPosition(topLevelClass, setLimit2);
-
- Method usePage = ElementTools.generateMethod(
- "usePage",
- JavaVisibility.PUBLIC,
- topLevelClass.getType(),
- new Parameter(integerWrapper, "pageNum"),
- new Parameter(integerWrapper, "pageSize")
- );
- usePage = ElementTools.generateMethodBody(
- usePage,
- "pageSize = pageSize == null || pageSize <= 0 ? this.defaultPageSize : pageSize;",
- "pageNum = pageNum == null || pageNum < this.minPageNum ? this.minPageNum : pageNum;",
- "if (pageSize >= this.ignorePageSize) {",
- "this.rows = null;",
- "this.offset = null;",
- "return this;",
- "}",
- "int cPageSize = pageSize > this.maxPageSize ? this.maxPageSize: pageSize;",
- "this.offset = (pageNum - this.minPageNum) * cPageSize;",
- "this.rows = cPageSize;",
- "return this;"
- );
- FormatTools.addMethodWithBestPosition(topLevelClass, usePage);
-
- // 计算获取当前页码
- Method getPageNum = ElementTools.generateMethod(
- "getPageNum",
- JavaVisibility.PUBLIC,
- integerWrapper
- );
- getPageNum = ElementTools.generateMethodBody(
- getPageNum,
- "if (this.rows == null || this.offset == null || this.rows == 0) {",
- "return this.minPageNum;",
- "}",
- "return this.offset / this.rows + this.minPageNum;"
- );
- FormatTools.addMethodWithBestPosition(topLevelClass, getPageNum);
- // 计算获取当前每页数量
- Method getPageSize = ElementTools.generateMethod(
- "getPageSize",
- JavaVisibility.PUBLIC,
- integerWrapper
- );
- getPageSize = ElementTools.generateMethodBody(
- getPageSize,
- "if (this.rows == null) {",
- "return this.ignorePageSize;",
- "}",
- "return this.rows;"
- );
- FormatTools.addMethodWithBestPosition(topLevelClass, getPageSize);
-
- // !!! clear 方法增加 offset 和 rows的清理
- List methodList = topLevelClass.getMethods();
- for (Method method : methodList) {
- if (method.getName().equals("clear")) {
- method.addBodyLine("rows = null;");
- method.addBodyLine("offset = null;");
- }
- }
- return true;
- }
-
- @Override
- public boolean sqlMapSelectAllElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
- this.generateLimitElement(element);
- return super.sqlMapSelectAllElementGenerated(element, introspectedTable);
- }
-
- @Override
- public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
- this.generateLimitElement(element);
- return super.sqlMapSelectByExampleWithoutBLOBsElementGenerated(element, introspectedTable);
- }
-
- @Override
- public boolean sqlMapSelectByExampleWithBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
- this.generateLimitElement(element);
- return super.sqlMapSelectByExampleWithBLOBsElementGenerated(element, introspectedTable);
- }
-
- @Override
- public void generateLimitElement(XmlElement element) {
- XmlElement ifLimitNotNullElement = new XmlElement("if");
- ifLimitNotNullElement.addAttribute(new Attribute("test", "rows != null"));
- // rows
- XmlElement ifOffsetNotNullElement = new XmlElement("if");
- ifOffsetNotNullElement.addAttribute(new Attribute("test", "offset != null"));
- ifOffsetNotNullElement.addElement(new TextElement("limit ${offset}, ${rows}"));
- ifLimitNotNullElement.addElement(ifOffsetNotNullElement);
- // offset
- XmlElement ifOffsetNullElement = new XmlElement("if");
- ifOffsetNullElement.addAttribute(new Attribute("test", "offset == null"));
- ifOffsetNullElement.addElement(new TextElement("limit ${rows}"));
- ifLimitNotNullElement.addElement(ifOffsetNullElement);
- element.addElement(ifLimitNotNullElement);
- }
-
-}
diff --git a/src/main/java/com/iqudoo/framework/mybatis/hook/ISelectSelectivePluginHook.java b/src/main/java/com/iqudoo/framework/mybatis/hook/ISelectSelectivePluginHook.java
deleted file mode 100644
index 11da92c..0000000
--- a/src/main/java/com/iqudoo/framework/mybatis/hook/ISelectSelectivePluginHook.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.iqudoo.framework.mybatis.hook;
-
-import org.mybatis.generator.api.dom.xml.XmlElement;
-
-public interface ISelectSelectivePluginHook {
-
- void generateLimitElement(XmlElement element);
-
-}
diff --git a/src/main/java/com/iqudoo/framework/mybatis/utils/ElementTools.java b/src/main/java/com/iqudoo/framework/mybatis/utils/ElementTools.java
index 0b4d053..1be29dd 100644
--- a/src/main/java/com/iqudoo/framework/mybatis/utils/ElementTools.java
+++ b/src/main/java/com/iqudoo/framework/mybatis/utils/ElementTools.java
@@ -1,5 +1,6 @@
package com.iqudoo.framework.mybatis.utils;
+import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.*;
@@ -8,6 +9,21 @@ import static org.mybatis.generator.internal.util.messages.Messages.getString;
@SuppressWarnings("unused")
public class ElementTools {
+ /**
+ * 检测数据表是否含有BLOB列数据
+ *
+ * @param introspectedTable introspectedTable
+ * @return 是/否
+ */
+ public static boolean hasBLOBColumns(IntrospectedTable introspectedTable) {
+ for (IntrospectedColumn column : introspectedTable.getAllColumns()) {
+ if (column.isBLOBColumn()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
/**
* 生成静态常量
*