diff --git a/README.md b/README.md index 5e9fbbe..9dc06f0 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,9 @@ 本插件为 MyBatis Generator 提供了以下增强功能: -1. **TapeMybatisGeneratorPlugin** - 扩展 MyBatis Mapper,添加 `selectPrimaryKeyByExample` 方法,支持分页查询主键列表 +1. **TapeMybatisGeneratorPlugin** - 扩展 MyBatis Mapper,添加 `selectPrimaryKeyByExample`, `batchInsert` 方法,拓展查询分页支持 2. **TapeRepositoryGeneratorPlugin** - 为非视图表自动生成 Repository 接口和实现类,提供完整的 CRUD 和软删除功能 3. **TapeRepoviewGeneratorPlugin** - 为视图表自动生成 RepoView 接口和实现类,提供查询功能 -4. **分页支持** - 为 Example 类自动添加分页相关字段和方法(offset、rows、usePage、limit 等) ## 插件说明 @@ -131,7 +130,6 @@ ```xml - @@ -161,7 +159,6 @@ | 参数名 | 说明 | 默认值 | 必需 | |----------------------------|-------------------------------|-------------------------------------------------------|------| -| `viewKeyWords` | 视图表关键字(逗号分隔,不区分大小写) | `VIEW_,V_` | 否 | | `targetProject` | 生成代码的目标项目路径 | `src/main/java` | 否 | | `modelPackage` | Model 类的包路径 | `com.iqudoo.platform.application.database.model` | 是 | | `mapperPackage` | Mapper 接口的包路径 | `com.iqudoo.platform.application.database.mapper` | 是 | @@ -177,11 +174,6 @@ | `startPageNum` | 分页开始页码 | `1` | 否 | | `maxPageSize` | 最大每页数量 | `100` | 否 | -**视图表识别规则**: -- 表名包含 `viewKeyWords` 中任一关键字的表将被识别为视图表,大小写不敏感 -- 视图表会生成 RepoView,不会生成 Repository -- 非视图表会生成 Repository,不会生成 RepoView - ## 数据库表结构要求 ### 标准表结构模板 diff --git a/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar b/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar index ef0fc17..456df45 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 c8c80ec..876c2d3 100644 --- a/src/main/java/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.java +++ b/src/main/java/com/iqudoo/framework/mybatis/TapeMybatisGeneratorPlugin.java @@ -170,6 +170,21 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter { ); FormatTools.addMethodWithBestPosition(topLevelClass, setLimitByOffsetRows); + Method setLimitByOffsetOnly = ElementTools.generateMethod( + "limitOffset", + JavaVisibility.PUBLIC, + topLevelClass.getType(), + new Parameter(integerType, "offset"), + new Parameter(integerType, "rows") + ); + setLimitByOffsetOnly = ElementTools.generateMethodBody( + setLimitByOffsetOnly, + "this.offset = offset;", + "this.rows = 999999999;", + "return this;" + ); + FormatTools.addMethodWithBestPosition(topLevelClass, setLimitByOffsetOnly); + Method usePage = ElementTools.generateMethod( "usePage", JavaVisibility.PUBLIC, @@ -402,13 +417,13 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter { // ============================================ selectPrimaryKeyByExample ========================================== @Override - public boolean clientGenerated(Interface interfaze, IntrospectedTable introspectedTable) { + public boolean clientGenerated(Interface interfaceObj, IntrospectedTable introspectedTable) { if (introspectedTable.getTargetRuntime() != IntrospectedTable.TargetRuntime.MYBATIS3) { - return super.clientGenerated(interfaze, introspectedTable); + return super.clientGenerated(interfaceObj, introspectedTable); } - addBatchInsertClientMethod(interfaze, introspectedTable); + addBatchInsertClientMethod(interfaceObj, introspectedTable); if (introspectedTable.getPrimaryKeyColumns().size() <= 0) { - return super.clientGenerated(interfaze, introspectedTable); + return super.clientGenerated(interfaceObj, introspectedTable); } // 获取主键列类型 FullyQualifiedJavaType primaryType = introspectedTable.getPrimaryKeyColumns().get(0) @@ -424,9 +439,9 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter { method.setVisibility(JavaVisibility.PUBLIC); method.setReturnType(returnType); method.addParameter(new Parameter(exampleType, "example")); - interfaze.addMethod(method); + interfaceObj.addMethod(method); - return super.clientGenerated(interfaze, introspectedTable); + return super.clientGenerated(interfaceObj, introspectedTable); } diff --git a/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java b/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java index 43d76c2..8b11df8 100644 --- a/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java +++ b/src/main/java/com/iqudoo/framework/mybatis/TapeRepositoryGeneratorPlugin.java @@ -27,7 +27,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { private String modelPackage = "com.iqudoo.platform.application.database.model"; private String mapperPackage = "com.iqudoo.platform.application.database.mapper"; private String targetProject = "src/main/java"; - private String viewKeyWords = "VIEW_,V_"; // 1.4.1版本专用:Java格式化器 private JavaFormatter javaFormatter; @@ -59,10 +58,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { modelPackage = stringConfig("modelPackage", modelPackage); mapperPackage = stringConfig("mapperPackage", mapperPackage); targetProject = stringConfig("targetProject", targetProject); - viewKeyWords = stringConfig("viewKeyWords", viewKeyWords); - if (StringUtility.stringHasValue(viewKeyWords)) { - viewKeyWords = viewKeyWords.toUpperCase(); - } } private String stringConfig(String key, String defaultValue) { @@ -87,8 +82,7 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { List generatedJavaFiles = new ArrayList<>(); // 视图表过滤逻辑 - String tableName = introspectedTable.getFullyQualifiedTable().getIntrospectedTableName().toUpperCase(); - if (isViewTable(tableName)) { + if (ElementTools.isViewTable(introspectedTable)) { return generatedJavaFiles; } @@ -135,18 +129,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { return generatedJavaFiles; } - private boolean isViewTable(String tableName) { - if (StringUtility.stringHasValue(viewKeyWords)) { - String[] keywords = viewKeyWords.split(","); - for (String keyword : keywords) { - if (tableName.contains(keyword.trim().toUpperCase())) { - return true; - } - } - } - return false; - } - /** * 核心修改:生成Repository接口(手动添加所有方法,无继承,匹配指定格式) */ diff --git a/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java b/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java index 8ef2b23..7bcd3e7 100644 --- a/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java +++ b/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java @@ -27,7 +27,6 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { private String modelPackage = "com.iqudoo.platform.application.database.model"; private String mapperPackage = "com.iqudoo.platform.application.database.mapper"; private String targetProject = "src/main/java"; - private String viewKeyWords = "VIEW_,V_"; // 1.4.1版本专用格式化器 private JavaFormatter javaFormatter; @@ -56,10 +55,6 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { modelPackage = stringConfig("modelPackage", modelPackage); mapperPackage = stringConfig("mapperPackage", mapperPackage); targetProject = stringConfig("targetProject", targetProject); - viewKeyWords = stringConfig("viewKeyWords", viewKeyWords); - if (StringUtility.stringHasValue(viewKeyWords)) { - viewKeyWords = viewKeyWords.toUpperCase(); - } } private String stringConfig(String key, String defaultValue) { @@ -82,13 +77,10 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { @Override public List contextGenerateAdditionalJavaFiles(IntrospectedTable introspectedTable) { List generatedJavaFiles = new ArrayList<>(); - // 仅处理视图表,非视图表直接返回 - String tableName = introspectedTable.getFullyQualifiedTable().getIntrospectedTableName().toUpperCase(); - if (!isViewTable(tableName)) { + if (!ElementTools.isViewTable(introspectedTable)) { return generatedJavaFiles; } - // 1. 获取视图表元数据 String domainObjectName = introspectedTable.getFullyQualifiedTable().getDomainObjectName(); String exampleClassName = domainObjectName + "Example"; @@ -132,22 +124,6 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { return generatedJavaFiles; } - /** - * 判断是否为视图表(关键字匹配 + MBG原生视图配置) - */ - private boolean isViewTable(String tableName) { - // 关键字匹配 - if (StringUtility.stringHasValue(viewKeyWords)) { - String[] keywords = viewKeyWords.split(","); - for (String keyword : keywords) { - if (tableName.contains(keyword.trim().toUpperCase())) { - return true; - } - } - } - return false; - } - /** * 核心修改:生成视图Repo接口(移除继承,手动添加指定方法) */ 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 1be29dd..e43f314 100644 --- a/src/main/java/com/iqudoo/framework/mybatis/utils/ElementTools.java +++ b/src/main/java/com/iqudoo/framework/mybatis/utils/ElementTools.java @@ -9,6 +9,17 @@ import static org.mybatis.generator.internal.util.messages.Messages.getString; @SuppressWarnings("unused") public class ElementTools { + /** + * 判断IntrospectedTable是否代表数据库视图 + * + * @param introspectedTable MBG内省表对象 + * @return true=视图,false=普通表/其他类型 + */ + public static boolean isViewTable(IntrospectedTable introspectedTable) { + String tableType = introspectedTable.getTableType(); + return "VIEW".equals(tableType); + } + /** * 检测数据表是否含有BLOB列数据 *