Compare commits
13 Commits
4bddff2de9
...
v1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0cfaea99c4 | ||
|
|
eea9e5e6ee | ||
|
|
114f69597b | ||
|
|
0281b89803 | ||
|
|
b4488bf7f3 | ||
|
|
959486fed0 | ||
|
|
c048da1faf | ||
|
|
b85966c535 | ||
|
|
0bea5abfb6 | ||
|
|
885f823203 | ||
|
|
dc7ccf905f | ||
|
|
abfab32498 | ||
|
|
6ecdf66eeb |
71
README.md
71
README.md
@@ -5,10 +5,9 @@
|
|||||||
|
|
||||||
本插件为 MyBatis Generator 提供了以下增强功能:
|
本插件为 MyBatis Generator 提供了以下增强功能:
|
||||||
|
|
||||||
1. **TapeMybatisGeneratorPlugin** - 扩展 MyBatis Mapper,添加 `selectPrimaryKeyByExample` 方法,支持分页查询主键列表
|
1. **TapeMybatisGeneratorPlugin** - 扩展 MyBatis Mapper,添加 `selectPrimaryKeyByExample`, `batchInsert` 方法,拓展查询分页支持
|
||||||
2. **TapeRepositoryGeneratorPlugin** - 为非视图表自动生成 Repository 接口和实现类,提供完整的 CRUD 和软删除功能
|
2. **TapeRepositoryGeneratorPlugin** - 为非视图表自动生成 Repository 接口和实现类,提供完整的 CRUD 和软删除功能
|
||||||
3. **TapeRepoviewGeneratorPlugin** - 为视图表自动生成 RepoView 接口和实现类,提供查询功能
|
3. **TapeRepoviewGeneratorPlugin** - 为视图表自动生成 RepoView 接口和实现类,提供查询功能
|
||||||
4. **分页支持** - 为 Example 类自动添加分页相关字段和方法(offset、rows、usePage、limit 等)
|
|
||||||
|
|
||||||
## 插件说明
|
## 插件说明
|
||||||
|
|
||||||
@@ -42,6 +41,7 @@
|
|||||||
- `countByTrash({Example} example)` - 统计回收站记录数
|
- `countByTrash({Example} example)` - 统计回收站记录数
|
||||||
- `countByTrashWithPage({Example} example)` - 统计分页回收站记录数
|
- `countByTrashWithPage({Example} example)` - 统计分页回收站记录数
|
||||||
- `insert({Model} record)` - 插入记录(自动生成 GUID、设置默认值)
|
- `insert({Model} record)` - 插入记录(自动生成 GUID、设置默认值)
|
||||||
|
- `batchInsert(List<{Model}> records)` - 批量插入记录(自动生成 GUID、设置默认值)
|
||||||
- `updateByExampleSelective({Model} record, {Example} example)` - 按条件更新记录
|
- `updateByExampleSelective({Model} record, {Example} example)` - 按条件更新记录
|
||||||
- `update({Model} record)` - 更新记录(支持乐观锁)
|
- `update({Model} record)` - 更新记录(支持乐观锁)
|
||||||
|
|
||||||
@@ -128,21 +128,24 @@
|
|||||||
### 2. 在 `mybatis.generator.xml` 中配置插件
|
### 2. 在 `mybatis.generator.xml` 中配置插件
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
|
|
||||||
<context id="Mysql" targetRuntime="MyBatis3">
|
<context id="Mysql" targetRuntime="MyBatis3">
|
||||||
<!-- 配置属性 -->
|
<!-- 配置属性 -->
|
||||||
<property name="viewKeyWords" value="VIEW_,V_"/>
|
|
||||||
<property name="targetProject" value="src/main/java"/>
|
<property name="targetProject" value="src/main/java"/>
|
||||||
<property name="modelPackage" value="com.iqudoo.platform.application.database.model"/>
|
<property name="modelPackage" value="com.iqudoo.platform.application.database.model"/>
|
||||||
<property name="mapperPackage" value="com.iqudoo.platform.application.database.mapper"/>
|
<property name="mapperPackage" value="com.iqudoo.platform.application.database.mapper"/>
|
||||||
<property name="facadeRepositoryPackage" value="com.iqudoo.platform.application.facade.repository"/>
|
<property name="facadeRepositoryPackage" value="com.iqudoo.platform.application.facade.repository"/>
|
||||||
<property name="domainRepositoryPackage" value="com.iqudoo.platform.application.domain.repository"/>
|
<property name="domainRepositoryPackage" value="com.iqudoo.platform.application.domain.repository"/>
|
||||||
<property name="facadeRepoviewPackage" value="com.iqudoo.platform.application.facade.repoview"/>
|
<property name="facadeViewRepositoryPackage" value="com.iqudoo.platform.application.facade.repoview"/>
|
||||||
<property name="domainRepoviewPackage" value="com.iqudoo.platform.application.domain.repoview"/>
|
<property name="domainViewRepositoryPackage" value="com.iqudoo.platform.application.domain.repoview"/>
|
||||||
<property name="snowflakeUtilClass" value="com.iqudoo.framework.tape.modules.utils.SnowflakeUtil"/>
|
<property name="guidGeneratorClass" value="com.iqudoo.framework.tape.modules.utils.SnowflakeUtil"/>
|
||||||
<property name="snowflakeUtilGenId" value="SnowflakeUtil.nextId()"/>
|
<property name="guidGeneratorCode" value="SnowflakeUtil.nextId()"/>
|
||||||
|
<property name="changeLogContextClassPackage" value="com.iqudoo.platform.application.domain.changeLog"/>
|
||||||
|
<property name="changeLogContextClassName" value="ChangeLogContext"/>
|
||||||
|
<property name="changeLogEnable" value="true"/>
|
||||||
<property name="slowQueryLoggerTime" value="300"/>
|
<property name="slowQueryLoggerTime" value="300"/>
|
||||||
<property name="slowQueryLoggerLevel" value="error"/>
|
<property name="slowQueryLoggerLevel" value="error"/>
|
||||||
<property name="priorityPrimaryKeyOffset" value="100"/>
|
<property name="optimisticLockEnable" value="true"/>
|
||||||
<property name="ignorePageSize" value="10000"/>
|
<property name="ignorePageSize" value="10000"/>
|
||||||
<property name="startPageNum" value="1"/>
|
<property name="startPageNum" value="1"/>
|
||||||
<property name="maxPageSize" value="100"/>
|
<property name="maxPageSize" value="100"/>
|
||||||
@@ -158,28 +161,40 @@
|
|||||||
|
|
||||||
### 3. 配置参数说明
|
### 3. 配置参数说明
|
||||||
|
|
||||||
| 参数名 | 说明 | 默认值 | 必需 |
|
| 参数名 | 说明 | 默认值 | 必需 |
|
||||||
|----------------------------|-------------------------------|-------------------------------------------------------|------|
|
|----------------------------|-------------------------------|---------------------------------------------------------|------|
|
||||||
| `viewKeyWords` | 视图表关键字(逗号分隔,不区分大小写) | `VIEW_,V_` | 否 |
|
| `targetProject` | 生成代码的目标项目路径 | `src/main/java` | 否 |
|
||||||
| `targetProject` | 生成代码的目标项目路径 | `src/main/java` | 否 |
|
| `modelPackage` | Model 类的包路径 | `com.iqudoo.platform.application.database.model` | 是 |
|
||||||
| `modelPackage` | Model 类的包路径 | `com.iqudoo.platform.application.database.model` | 是 |
|
| `mapperPackage` | Mapper 接口的包路径 | `com.iqudoo.platform.application.database.mapper` | 是 |
|
||||||
| `mapperPackage` | Mapper 接口的包路径 | `com.iqudoo.platform.application.database.mapper` | 是 |
|
| `facadeRepositoryPackage` | Repository 接口的包路径 | `com.iqudoo.platform.application.facade.repository` | 否 |
|
||||||
| `facadeRepositoryPackage` | Repository 接口的包路径 | `com.iqudoo.platform.application.facade.repository` | 否 |
|
| `domainRepositoryPackage` | Repository 实现类的包路径 | `com.iqudoo.platform.application.domain.repository` | 否 |
|
||||||
| `domainRepositoryPackage` | Repository 实现类的包路径 | `com.iqudoo.platform.application.domain.repository` | 否 |
|
| `facadeRepoviewPackage` | RepoView 接口的包路径 | `com.iqudoo.platform.application.facade.repoview` | 否 |
|
||||||
| `facadeRepoviewPackage` | RepoView 接口的包路径 | `com.iqudoo.platform.application.facade.repoview` | 否 |
|
|
||||||
| `snowflakeUtilClass` | 雪花算法ID生成工具类 | `com.iqudoo.framework.tape.modules.utils.SnowflakeUtil` | 否 |
|
| `snowflakeUtilClass` | 雪花算法ID生成工具类 | `com.iqudoo.framework.tape.modules.utils.SnowflakeUtil` | 否 |
|
||||||
| `snowflakeUtilGenId` | 雪花算法ID生成方法 | `SnowflakeUtil.nextId()` | 否 |
|
| `snowflakeUtilGenId` | 雪花算法ID生成方法 | `SnowflakeUtil.nextId()` | 否 |
|
||||||
| `slowQueryLoggerTime` | 慢查询日志时间阈值 | `300` | 否 |
|
| `changeLogContextClassPackage` | 变更日志上下文包路径 | `com.iqudoo.platform.application.domain.changeLog` | 否 |
|
||||||
| `slowQueryLoggerLevel` | 慢查询日志类型:error,warn,debug,info | `error` | 否 |
|
| `changeLogContextClassName` | 变更日志上下文类 | `ChangeLogContext` | 否 |
|
||||||
| `priorityPrimaryKeyOffset` | 优先查询主键偏移阈值 | `0` | 否 |
|
| `changeLogEnable` | 变更日志监听开关 | `false` | 否 |
|
||||||
| `ignorePageSize` | 忽略分页阈值 | `10000` | 否 |
|
| `slowQueryLoggerTime` | 慢查询日志时间阈值 | `300` | 否 |
|
||||||
| `startPageNum` | 分页开始页码 | `1` | 否 |
|
| `slowQueryLoggerLevel` | 慢查询日志类型:error,warn,debug,info | `error` | 否 |
|
||||||
| `maxPageSize` | 最大每页数量 | `100` | 否 |
|
| `ignorePageSize` | 忽略分页阈值 | `10000` | 否 |
|
||||||
|
| `startPageNum` | 分页开始页码 | `1` | 否 |
|
||||||
|
| `maxPageSize` | 最大每页数量 | `100` | 否 |
|
||||||
|
|
||||||
**视图表识别规则**:
|
## 变更日志监听
|
||||||
- 表名包含 `viewKeyWords` 中任一关键字的表将被识别为视图表,大小写不敏感
|
|
||||||
- 视图表会生成 RepoView,不会生成 Repository
|
ChangeLogContext应该提供以下实现的静态方法,供Repository实现中调用
|
||||||
- 非视图表会生成 Repository,不会生成 RepoView
|
```java
|
||||||
|
public class ChangeLogContext {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加一条变更
|
||||||
|
*/
|
||||||
|
public static void addLog(String tableName, String eventType, Long dataGuid, Map<String, Object[]> fieldChanges) {
|
||||||
|
// your thing code
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## 数据库表结构要求
|
## 数据库表结构要求
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -2,6 +2,7 @@ package com.iqudoo.framework.mybatis;
|
|||||||
|
|
||||||
import com.iqudoo.framework.mybatis.utils.ElementTools;
|
import com.iqudoo.framework.mybatis.utils.ElementTools;
|
||||||
import com.iqudoo.framework.mybatis.utils.FormatTools;
|
import com.iqudoo.framework.mybatis.utils.FormatTools;
|
||||||
|
import org.mybatis.generator.api.IntrospectedColumn;
|
||||||
import org.mybatis.generator.api.IntrospectedTable;
|
import org.mybatis.generator.api.IntrospectedTable;
|
||||||
import org.mybatis.generator.api.PluginAdapter;
|
import org.mybatis.generator.api.PluginAdapter;
|
||||||
import org.mybatis.generator.api.dom.java.*;
|
import org.mybatis.generator.api.dom.java.*;
|
||||||
@@ -56,12 +57,18 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
@SuppressWarnings("DuplicatedCode")
|
@SuppressWarnings("DuplicatedCode")
|
||||||
@Override
|
@Override
|
||||||
public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
|
public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
|
||||||
PrimitiveTypeWrapper integerWrapper = FullyQualifiedJavaType.getIntInstance().getPrimitiveTypeWrapper();
|
FullyQualifiedJavaType integerType = new FullyQualifiedJavaType("java.lang.Integer");
|
||||||
|
FullyQualifiedJavaType booleanType = new FullyQualifiedJavaType("java.lang.Boolean");
|
||||||
|
FullyQualifiedJavaType stringType = new FullyQualifiedJavaType("java.lang.String");
|
||||||
|
|
||||||
|
String domainObjectName = introspectedTable.getFullyQualifiedTable().getDomainObjectName();
|
||||||
|
String exampleClassName = domainObjectName + "Example";
|
||||||
|
|
||||||
// 添加 startPageNum、maxPageSize、ignorePageSize 字段
|
// 添加 startPageNum、maxPageSize、ignorePageSize 字段
|
||||||
Field maxPageSizeField = ElementTools.generateField(
|
Field maxPageSizeField = ElementTools.generateField(
|
||||||
"maxPageSize",
|
"maxPageSize",
|
||||||
JavaVisibility.PROTECTED,
|
JavaVisibility.PROTECTED,
|
||||||
integerWrapper,
|
integerType,
|
||||||
this.maxPageSize + ""
|
this.maxPageSize + ""
|
||||||
);
|
);
|
||||||
topLevelClass.addField(maxPageSizeField);
|
topLevelClass.addField(maxPageSizeField);
|
||||||
@@ -69,7 +76,7 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
Field ignorePageSizeField = ElementTools.generateField(
|
Field ignorePageSizeField = ElementTools.generateField(
|
||||||
"ignorePageSize",
|
"ignorePageSize",
|
||||||
JavaVisibility.PROTECTED,
|
JavaVisibility.PROTECTED,
|
||||||
integerWrapper,
|
integerType,
|
||||||
this.ignorePageSize + ""
|
this.ignorePageSize + ""
|
||||||
);
|
);
|
||||||
topLevelClass.addField(ignorePageSizeField);
|
topLevelClass.addField(ignorePageSizeField);
|
||||||
@@ -77,7 +84,7 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
Field startPageNumField = ElementTools.generateField(
|
Field startPageNumField = ElementTools.generateField(
|
||||||
"startPageNum",
|
"startPageNum",
|
||||||
JavaVisibility.PROTECTED,
|
JavaVisibility.PROTECTED,
|
||||||
integerWrapper,
|
integerType,
|
||||||
startPageNum + ""
|
startPageNum + ""
|
||||||
);
|
);
|
||||||
topLevelClass.addField(startPageNumField);
|
topLevelClass.addField(startPageNumField);
|
||||||
@@ -86,7 +93,7 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
Field offsetField = ElementTools.generateField(
|
Field offsetField = ElementTools.generateField(
|
||||||
"offset",
|
"offset",
|
||||||
JavaVisibility.PROTECTED,
|
JavaVisibility.PROTECTED,
|
||||||
integerWrapper,
|
integerType,
|
||||||
"null"
|
"null"
|
||||||
);
|
);
|
||||||
topLevelClass.addField(offsetField);
|
topLevelClass.addField(offsetField);
|
||||||
@@ -94,7 +101,7 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
Field rowsField = ElementTools.generateField(
|
Field rowsField = ElementTools.generateField(
|
||||||
"rows",
|
"rows",
|
||||||
JavaVisibility.PROTECTED,
|
JavaVisibility.PROTECTED,
|
||||||
integerWrapper,
|
integerType,
|
||||||
"null"
|
"null"
|
||||||
);
|
);
|
||||||
topLevelClass.addField(rowsField);
|
topLevelClass.addField(rowsField);
|
||||||
@@ -105,7 +112,7 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
Field withBLOBsField = ElementTools.generateField(
|
Field withBLOBsField = ElementTools.generateField(
|
||||||
"withBLOBs",
|
"withBLOBs",
|
||||||
JavaVisibility.PROTECTED,
|
JavaVisibility.PROTECTED,
|
||||||
new FullyQualifiedJavaType("java.lang.Boolean"),
|
booleanType,
|
||||||
"true"
|
"true"
|
||||||
);
|
);
|
||||||
topLevelClass.addField(withBLOBsField);
|
topLevelClass.addField(withBLOBsField);
|
||||||
@@ -142,7 +149,7 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
"limit",
|
"limit",
|
||||||
JavaVisibility.PUBLIC,
|
JavaVisibility.PUBLIC,
|
||||||
topLevelClass.getType(),
|
topLevelClass.getType(),
|
||||||
new Parameter(integerWrapper, "rows")
|
new Parameter(integerType, "rows")
|
||||||
);
|
);
|
||||||
setLimitByRows = ElementTools.generateMethodBody(
|
setLimitByRows = ElementTools.generateMethodBody(
|
||||||
setLimitByRows,
|
setLimitByRows,
|
||||||
@@ -156,8 +163,8 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
"limit",
|
"limit",
|
||||||
JavaVisibility.PUBLIC,
|
JavaVisibility.PUBLIC,
|
||||||
topLevelClass.getType(),
|
topLevelClass.getType(),
|
||||||
new Parameter(integerWrapper, "offset"),
|
new Parameter(integerType, "offset"),
|
||||||
new Parameter(integerWrapper, "rows")
|
new Parameter(integerType, "rows")
|
||||||
);
|
);
|
||||||
setLimitByOffsetRows = ElementTools.generateMethodBody(
|
setLimitByOffsetRows = ElementTools.generateMethodBody(
|
||||||
setLimitByOffsetRows,
|
setLimitByOffsetRows,
|
||||||
@@ -167,12 +174,27 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
);
|
);
|
||||||
FormatTools.addMethodWithBestPosition(topLevelClass, setLimitByOffsetRows);
|
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(
|
Method usePage = ElementTools.generateMethod(
|
||||||
"usePage",
|
"usePage",
|
||||||
JavaVisibility.PUBLIC,
|
JavaVisibility.PUBLIC,
|
||||||
topLevelClass.getType(),
|
topLevelClass.getType(),
|
||||||
new Parameter(integerWrapper, "pageNum"),
|
new Parameter(integerType, "pageNum"),
|
||||||
new Parameter(integerWrapper, "pageSize")
|
new Parameter(integerType, "pageSize")
|
||||||
);
|
);
|
||||||
usePage = ElementTools.generateMethodBody(
|
usePage = ElementTools.generateMethodBody(
|
||||||
usePage,
|
usePage,
|
||||||
@@ -194,7 +216,7 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
Method getPageNum = ElementTools.generateMethod(
|
Method getPageNum = ElementTools.generateMethod(
|
||||||
"getPageNum",
|
"getPageNum",
|
||||||
JavaVisibility.PUBLIC,
|
JavaVisibility.PUBLIC,
|
||||||
integerWrapper
|
integerType
|
||||||
);
|
);
|
||||||
getPageNum = ElementTools.generateMethodBody(
|
getPageNum = ElementTools.generateMethodBody(
|
||||||
getPageNum,
|
getPageNum,
|
||||||
@@ -208,7 +230,7 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
Method getPageSize = ElementTools.generateMethod(
|
Method getPageSize = ElementTools.generateMethod(
|
||||||
"getPageSize",
|
"getPageSize",
|
||||||
JavaVisibility.PUBLIC,
|
JavaVisibility.PUBLIC,
|
||||||
integerWrapper
|
integerType
|
||||||
);
|
);
|
||||||
getPageSize = ElementTools.generateMethodBody(
|
getPageSize = ElementTools.generateMethodBody(
|
||||||
getPageSize,
|
getPageSize,
|
||||||
@@ -222,7 +244,7 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
Method getRows = ElementTools.generateMethod(
|
Method getRows = ElementTools.generateMethod(
|
||||||
"getRows",
|
"getRows",
|
||||||
JavaVisibility.PUBLIC,
|
JavaVisibility.PUBLIC,
|
||||||
integerWrapper
|
integerType
|
||||||
);
|
);
|
||||||
getRows = ElementTools.generateMethodBody(
|
getRows = ElementTools.generateMethodBody(
|
||||||
getRows,
|
getRows,
|
||||||
@@ -233,7 +255,7 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
Method getOffset = ElementTools.generateMethod(
|
Method getOffset = ElementTools.generateMethod(
|
||||||
"getOffset",
|
"getOffset",
|
||||||
JavaVisibility.PUBLIC,
|
JavaVisibility.PUBLIC,
|
||||||
integerWrapper
|
integerType
|
||||||
);
|
);
|
||||||
getOffset = ElementTools.generateMethodBody(
|
getOffset = ElementTools.generateMethodBody(
|
||||||
getOffset,
|
getOffset,
|
||||||
@@ -241,14 +263,108 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
);
|
);
|
||||||
FormatTools.addMethodWithBestPosition(topLevelClass, getOffset);
|
FormatTools.addMethodWithBestPosition(topLevelClass, getOffset);
|
||||||
|
|
||||||
|
Method getLimitString = ElementTools.generateMethod(
|
||||||
|
"getLimitString",
|
||||||
|
JavaVisibility.PUBLIC,
|
||||||
|
stringType
|
||||||
|
);
|
||||||
|
getLimitString = ElementTools.generateMethodBody(
|
||||||
|
getLimitString,
|
||||||
|
"if (getRows() != null) {",
|
||||||
|
"if (getOffset() != null) {",
|
||||||
|
"return getOffset() + \",\" + getRows();",
|
||||||
|
"} else {",
|
||||||
|
"return getRows() + \"\";",
|
||||||
|
"}",
|
||||||
|
"}",
|
||||||
|
"return null;"
|
||||||
|
);
|
||||||
|
FormatTools.addMethodWithBestPosition(topLevelClass, getLimitString);
|
||||||
|
|
||||||
|
Method getWhereString = ElementTools.generateMethod(
|
||||||
|
"getWhereString",
|
||||||
|
JavaVisibility.PUBLIC,
|
||||||
|
stringType
|
||||||
|
);
|
||||||
|
getWhereString = ElementTools.generateMethodBody(
|
||||||
|
getWhereString,
|
||||||
|
"if (getOredCriteria() != null) {",
|
||||||
|
"List<String> whereGroup = new ArrayList<>();",
|
||||||
|
"for (Criteria criteria : getOredCriteria()) {",
|
||||||
|
"List<String> criterionList = new ArrayList<>();",
|
||||||
|
"for (Criterion criterion : criteria.getAllCriteria()) {",
|
||||||
|
"if (criterion.isNoValue()) {",
|
||||||
|
"criterionList.add(criterion.getCondition());",
|
||||||
|
"} else if (criterion.isBetweenValue()) {",
|
||||||
|
"criterionList.add(criterion.getCondition() + \" \" + criterion.getValue() + \",\" + criterion.getSecondValue());",
|
||||||
|
"} else {",
|
||||||
|
"criterionList.add(criterion.getCondition() + \" \" + criterion.getValue());",
|
||||||
|
"}",
|
||||||
|
"}",
|
||||||
|
"whereGroup.add(String.join(\" and \", criterionList));",
|
||||||
|
"}",
|
||||||
|
"if (whereGroup.size() > 1) {",
|
||||||
|
"List<String> mapWhereGroup = new ArrayList<>();",
|
||||||
|
"for (String where : whereGroup) {",
|
||||||
|
"mapWhereGroup.add(\"(\" + where + \")\");",
|
||||||
|
"}",
|
||||||
|
"whereGroup = mapWhereGroup;",
|
||||||
|
"}",
|
||||||
|
"return String.join(\" or \", whereGroup);",
|
||||||
|
"}",
|
||||||
|
"return null;"
|
||||||
|
);
|
||||||
|
FormatTools.addMethodWithBestPosition(topLevelClass, getWhereString);
|
||||||
|
|
||||||
|
|
||||||
|
Method cloneExample = ElementTools.generateMethod(
|
||||||
|
"cloneExample",
|
||||||
|
JavaVisibility.PUBLIC,
|
||||||
|
topLevelClass.getType()
|
||||||
|
);
|
||||||
|
cloneExample = ElementTools.generateMethodBody(
|
||||||
|
cloneExample,
|
||||||
|
exampleClassName + " newExample = new " + exampleClassName + "();",
|
||||||
|
"newExample.rows = this.rows;",
|
||||||
|
"newExample.offset = this.offset;",
|
||||||
|
"newExample.maxPageSize = this.maxPageSize;",
|
||||||
|
"newExample.ignorePageSize = this.ignorePageSize;",
|
||||||
|
"newExample.startPageNum = startPageNum;",
|
||||||
|
hasBLOBColumns ? "newExample.withBLOBs = withBLOBs;" : "",
|
||||||
|
"if (this.getOredCriteria() != null && !this.getOredCriteria().isEmpty()) {",
|
||||||
|
"for (" + exampleClassName + ".Criteria oldCriteria : this.getOredCriteria()) {",
|
||||||
|
exampleClassName + ".Criteria newCriteria = newExample.or();",
|
||||||
|
"newCriteria.getCriteria().addAll(oldCriteria.getCriteria());",
|
||||||
|
"}",
|
||||||
|
"}",
|
||||||
|
"newExample.setOrderByClause(this.getOrderByClause());",
|
||||||
|
"return newExample;"
|
||||||
|
);
|
||||||
|
FormatTools.addMethodWithBestPosition(topLevelClass, cloneExample);
|
||||||
|
|
||||||
// !!! clear 方法增加 offset 和 rows的清理
|
// !!! clear 方法增加 offset 和 rows的清理
|
||||||
|
boolean hasClear = false;
|
||||||
List<Method> methodList = topLevelClass.getMethods();
|
List<Method> methodList = topLevelClass.getMethods();
|
||||||
for (Method method : methodList) {
|
for (Method method : methodList) {
|
||||||
if (method.getName().equals("clear")) {
|
if (method.getName().equals("clear")) {
|
||||||
method.addBodyLine("rows = null;");
|
method.addBodyLine("rows = null;");
|
||||||
method.addBodyLine("offset = null;");
|
method.addBodyLine("offset = null;");
|
||||||
|
hasClear = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!hasClear) {
|
||||||
|
Method clear = ElementTools.generateMethod(
|
||||||
|
"clear",
|
||||||
|
JavaVisibility.PUBLIC,
|
||||||
|
new FullyQualifiedJavaType("void")
|
||||||
|
);
|
||||||
|
clear = ElementTools.generateMethodBody(
|
||||||
|
clear,
|
||||||
|
"rows = null;",
|
||||||
|
"offset = null;"
|
||||||
|
);
|
||||||
|
FormatTools.addMethodWithBestPosition(topLevelClass, clear);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,16 +402,76 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
element.addElement(ifLimitNotNullElement);
|
element.addElement(ifLimitNotNullElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ============================================ batchInsert ==========================================
|
||||||
|
|
||||||
|
private void addBatchInsertClientMethod(Interface interfaceObj, IntrospectedTable introspectedTable) {
|
||||||
|
if (introspectedTable.getAllColumns().isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
FullyQualifiedJavaType rowType = ElementTools.hasBLOBColumns(introspectedTable)
|
||||||
|
? ElementTools.getModelTypeWithBLOBs(introspectedTable)
|
||||||
|
: ElementTools.getModelTypeWithoutBLOBs(introspectedTable);
|
||||||
|
FullyQualifiedJavaType listType = FullyQualifiedJavaType.getNewListInstance();
|
||||||
|
listType.addTypeArgument(rowType);
|
||||||
|
Parameter recordsParam = new Parameter(listType, "records");
|
||||||
|
recordsParam.addAnnotation("@Param(\"records\")");
|
||||||
|
|
||||||
|
Method batchInsert = new Method("batchInsert");
|
||||||
|
batchInsert.setAbstract(true);
|
||||||
|
batchInsert.setVisibility(JavaVisibility.PUBLIC);
|
||||||
|
batchInsert.setReturnType(FullyQualifiedJavaType.getIntInstance());
|
||||||
|
batchInsert.addParameter(recordsParam);
|
||||||
|
|
||||||
|
interfaceObj.addImportedType(new FullyQualifiedJavaType("java.util.List"));
|
||||||
|
interfaceObj.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Param"));
|
||||||
|
interfaceObj.addMethod(batchInsert);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addBatchInsertXmlElement(Document document, IntrospectedTable introspectedTable) {
|
||||||
|
if (introspectedTable.getAllColumns().isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String tableName = introspectedTable.getFullyQualifiedTableNameAtRuntime();
|
||||||
|
StringBuilder columnList = new StringBuilder();
|
||||||
|
StringBuilder foreachBody = new StringBuilder();
|
||||||
|
foreachBody.append("(");
|
||||||
|
boolean first = true;
|
||||||
|
for (IntrospectedColumn column : introspectedTable.getAllColumns()) {
|
||||||
|
if (!first) {
|
||||||
|
columnList.append(", ");
|
||||||
|
foreachBody.append(", ");
|
||||||
|
}
|
||||||
|
first = false;
|
||||||
|
columnList.append(column.getActualColumnName());
|
||||||
|
foreachBody.append("#{item.").append(column.getJavaProperty()).append("}");
|
||||||
|
}
|
||||||
|
foreachBody.append(")");
|
||||||
|
|
||||||
|
XmlElement foreach = new XmlElement("foreach");
|
||||||
|
foreach.addAttribute(new Attribute("collection", "records"));
|
||||||
|
foreach.addAttribute(new Attribute("item", "item"));
|
||||||
|
foreach.addAttribute(new Attribute("separator", ","));
|
||||||
|
foreach.addElement(new TextElement(foreachBody.toString()));
|
||||||
|
|
||||||
|
XmlElement insert = new XmlElement("insert");
|
||||||
|
insert.addAttribute(new Attribute("id", "batchInsert"));
|
||||||
|
insert.addElement(new TextElement(
|
||||||
|
"insert into " + tableName + " (" + columnList + ") values"));
|
||||||
|
insert.addElement(foreach);
|
||||||
|
|
||||||
|
document.getRootElement().addElement(insert);
|
||||||
|
}
|
||||||
|
|
||||||
// ============================================ selectPrimaryKeyByExample ==========================================
|
// ============================================ selectPrimaryKeyByExample ==========================================
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean clientGenerated(Interface interfaze, IntrospectedTable introspectedTable) {
|
public boolean clientGenerated(Interface interfaceObj, IntrospectedTable introspectedTable) {
|
||||||
if (introspectedTable.getTargetRuntime() != IntrospectedTable.TargetRuntime.MYBATIS3) {
|
if (introspectedTable.getTargetRuntime() != IntrospectedTable.TargetRuntime.MYBATIS3) {
|
||||||
return true;
|
return super.clientGenerated(interfaceObj, introspectedTable);
|
||||||
}
|
}
|
||||||
// 添加接口方法
|
addBatchInsertClientMethod(interfaceObj, introspectedTable);
|
||||||
if (introspectedTable.getPrimaryKeyColumns().size() <= 0) {
|
if (introspectedTable.getPrimaryKeyColumns().size() <= 0) {
|
||||||
return true;
|
return super.clientGenerated(interfaceObj, introspectedTable);
|
||||||
}
|
}
|
||||||
// 获取主键列类型
|
// 获取主键列类型
|
||||||
FullyQualifiedJavaType primaryType = introspectedTable.getPrimaryKeyColumns().get(0)
|
FullyQualifiedJavaType primaryType = introspectedTable.getPrimaryKeyColumns().get(0)
|
||||||
@@ -311,19 +487,20 @@ public class TapeMybatisGeneratorPlugin extends PluginAdapter {
|
|||||||
method.setVisibility(JavaVisibility.PUBLIC);
|
method.setVisibility(JavaVisibility.PUBLIC);
|
||||||
method.setReturnType(returnType);
|
method.setReturnType(returnType);
|
||||||
method.addParameter(new Parameter(exampleType, "example"));
|
method.addParameter(new Parameter(exampleType, "example"));
|
||||||
interfaze.addMethod(method);
|
interfaceObj.addMethod(method);
|
||||||
|
|
||||||
return super.clientGenerated(interfaze, introspectedTable);
|
return super.clientGenerated(interfaceObj, introspectedTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) {
|
public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) {
|
||||||
if (introspectedTable.getTargetRuntime() != IntrospectedTable.TargetRuntime.MYBATIS3) {
|
if (introspectedTable.getTargetRuntime() != IntrospectedTable.TargetRuntime.MYBATIS3) {
|
||||||
return true;
|
return super.sqlMapDocumentGenerated(document, introspectedTable);
|
||||||
}
|
}
|
||||||
|
addBatchInsertXmlElement(document, introspectedTable);
|
||||||
if (introspectedTable.getPrimaryKeyColumns().size() <= 0) {
|
if (introspectedTable.getPrimaryKeyColumns().size() <= 0) {
|
||||||
return true;
|
return super.sqlMapDocumentGenerated(document, introspectedTable);
|
||||||
}
|
}
|
||||||
// 获取主键列名
|
// 获取主键列名
|
||||||
String primaryKeyColumn = introspectedTable.getPrimaryKeyColumns().get(0)
|
String primaryKeyColumn = introspectedTable.getPrimaryKeyColumns().get(0)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -22,12 +22,11 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
|
|||||||
// 视图Repo包配置(可通过配置文件自定义)
|
// 视图Repo包配置(可通过配置文件自定义)
|
||||||
private String slowQueryLoggerTime = "300";
|
private String slowQueryLoggerTime = "300";
|
||||||
private String slowQueryLoggerLevel = "error";
|
private String slowQueryLoggerLevel = "error";
|
||||||
private String facadeRepoviewPackage = "com.iqudoo.platform.application.facade.repoview";
|
|
||||||
private String domainRepoviewPackage = "com.iqudoo.platform.application.domain.repoview";
|
|
||||||
private String modelPackage = "com.iqudoo.platform.application.database.model";
|
private String modelPackage = "com.iqudoo.platform.application.database.model";
|
||||||
private String mapperPackage = "com.iqudoo.platform.application.database.mapper";
|
private String mapperPackage = "com.iqudoo.platform.application.database.mapper";
|
||||||
|
private String facadeViewRepositoryPackage = "com.iqudoo.platform.application.facade.repoview";
|
||||||
|
private String domainViewRepositoryPackage = "com.iqudoo.platform.application.domain.repoview";
|
||||||
private String targetProject = "src/main/java";
|
private String targetProject = "src/main/java";
|
||||||
private String viewKeyWords = "VIEW_,V_";
|
|
||||||
|
|
||||||
// 1.4.1版本专用格式化器
|
// 1.4.1版本专用格式化器
|
||||||
private JavaFormatter javaFormatter;
|
private JavaFormatter javaFormatter;
|
||||||
@@ -51,15 +50,11 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
|
|||||||
if (!UtilTools.inArray(new String[]{"error", "warn", "debug", "info"}, slowQueryLoggerLevel)) {
|
if (!UtilTools.inArray(new String[]{"error", "warn", "debug", "info"}, slowQueryLoggerLevel)) {
|
||||||
slowQueryLoggerLevel = "error";
|
slowQueryLoggerLevel = "error";
|
||||||
}
|
}
|
||||||
facadeRepoviewPackage = stringConfig("facadeRepoviewPackage", facadeRepoviewPackage);
|
facadeViewRepositoryPackage = stringConfig("facadeViewRepositoryPackage", facadeViewRepositoryPackage);
|
||||||
domainRepoviewPackage = stringConfig("domainRepoviewPackage", domainRepoviewPackage);
|
domainViewRepositoryPackage = stringConfig("domainViewRepositoryPackage", domainViewRepositoryPackage);
|
||||||
modelPackage = stringConfig("modelPackage", modelPackage);
|
modelPackage = stringConfig("modelPackage", modelPackage);
|
||||||
mapperPackage = stringConfig("mapperPackage", mapperPackage);
|
mapperPackage = stringConfig("mapperPackage", mapperPackage);
|
||||||
targetProject = stringConfig("targetProject", targetProject);
|
targetProject = stringConfig("targetProject", targetProject);
|
||||||
viewKeyWords = stringConfig("viewKeyWords", viewKeyWords);
|
|
||||||
if (StringUtility.stringHasValue(viewKeyWords)) {
|
|
||||||
viewKeyWords = viewKeyWords.toUpperCase();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String stringConfig(String key, String defaultValue) {
|
private String stringConfig(String key, String defaultValue) {
|
||||||
@@ -82,13 +77,10 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
|
|||||||
@Override
|
@Override
|
||||||
public List<GeneratedJavaFile> contextGenerateAdditionalJavaFiles(IntrospectedTable introspectedTable) {
|
public List<GeneratedJavaFile> contextGenerateAdditionalJavaFiles(IntrospectedTable introspectedTable) {
|
||||||
List<GeneratedJavaFile> generatedJavaFiles = new ArrayList<>();
|
List<GeneratedJavaFile> generatedJavaFiles = new ArrayList<>();
|
||||||
|
|
||||||
// 仅处理视图表,非视图表直接返回
|
// 仅处理视图表,非视图表直接返回
|
||||||
String tableName = introspectedTable.getFullyQualifiedTable().getIntrospectedTableName().toUpperCase();
|
if (!ElementTools.isViewTable(introspectedTable)) {
|
||||||
if (!isViewTable(tableName)) {
|
|
||||||
return generatedJavaFiles;
|
return generatedJavaFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1. 获取视图表元数据
|
// 1. 获取视图表元数据
|
||||||
String domainObjectName = introspectedTable.getFullyQualifiedTable().getDomainObjectName();
|
String domainObjectName = introspectedTable.getFullyQualifiedTable().getDomainObjectName();
|
||||||
String exampleClassName = domainObjectName + "Example";
|
String exampleClassName = domainObjectName + "Example";
|
||||||
@@ -126,33 +118,17 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
|
|||||||
generatedJavaFiles.add(implFile);
|
generatedJavaFiles.add(implFile);
|
||||||
|
|
||||||
// 4. 手动写入磁盘(兼容1.4.1)
|
// 4. 手动写入磁盘(兼容1.4.1)
|
||||||
generateJavaFileToDisk(repoInterface, facadeRepoviewPackage);
|
generateJavaFileToDisk(repoInterface, facadeViewRepositoryPackage);
|
||||||
generateJavaFileToDisk(repoImpl, domainRepoviewPackage);
|
generateJavaFileToDisk(repoImpl, domainViewRepositoryPackage);
|
||||||
|
|
||||||
return generatedJavaFiles;
|
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接口(移除继承,手动添加指定方法)
|
* 核心修改:生成视图Repo接口(移除继承,手动添加指定方法)
|
||||||
*/
|
*/
|
||||||
private Interface generateRepoViewInterface(String interfaceName, String modelClassName, String exampleClassName) {
|
private Interface generateRepoViewInterface(String interfaceName, String modelClassName, String exampleClassName) {
|
||||||
Interface repoInterface = new Interface(facadeRepoviewPackage + "." + interfaceName);
|
Interface repoInterface = new Interface(facadeViewRepositoryPackage + "." + interfaceName);
|
||||||
repoInterface.setVisibility(JavaVisibility.PUBLIC);
|
repoInterface.setVisibility(JavaVisibility.PUBLIC);
|
||||||
|
|
||||||
// 添加必要的导入包(仅保留model、example、List)
|
// 添加必要的导入包(仅保留model、example、List)
|
||||||
@@ -211,7 +187,7 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
|
|||||||
boolean hasBLOBColumns
|
boolean hasBLOBColumns
|
||||||
) {
|
) {
|
||||||
|
|
||||||
TopLevelClass implClass = new TopLevelClass(domainRepoviewPackage + "." + implClassName);
|
TopLevelClass implClass = new TopLevelClass(domainViewRepositoryPackage + "." + implClassName);
|
||||||
implClass.setVisibility(JavaVisibility.PUBLIC);
|
implClass.setVisibility(JavaVisibility.PUBLIC);
|
||||||
implClass.addAnnotation("@SuppressWarnings(\"DuplicatedCode\")");
|
implClass.addAnnotation("@SuppressWarnings(\"DuplicatedCode\")");
|
||||||
implClass.addAnnotation("@Repository");
|
implClass.addAnnotation("@Repository");
|
||||||
@@ -220,7 +196,7 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
|
|||||||
addImportPackages(implClass, modelClassName, exampleClassName, mapperClassName, interfaceName);
|
addImportPackages(implClass, modelClassName, exampleClassName, mapperClassName, interfaceName);
|
||||||
|
|
||||||
// 实现Repo接口
|
// 实现Repo接口
|
||||||
FullyQualifiedJavaType superInterface = new FullyQualifiedJavaType(facadeRepoviewPackage + "." + interfaceName);
|
FullyQualifiedJavaType superInterface = new FullyQualifiedJavaType(facadeViewRepositoryPackage + "." + interfaceName);
|
||||||
implClass.addSuperInterface(superInterface);
|
implClass.addSuperInterface(superInterface);
|
||||||
|
|
||||||
// slow query logger
|
// slow query logger
|
||||||
@@ -256,7 +232,7 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
|
|||||||
implClass.addImportedType(new FullyQualifiedJavaType(modelPackage + "." + modelClassName));
|
implClass.addImportedType(new FullyQualifiedJavaType(modelPackage + "." + modelClassName));
|
||||||
implClass.addImportedType(new FullyQualifiedJavaType(modelPackage + "." + exampleClassName));
|
implClass.addImportedType(new FullyQualifiedJavaType(modelPackage + "." + exampleClassName));
|
||||||
// Repo接口
|
// Repo接口
|
||||||
implClass.addImportedType(new FullyQualifiedJavaType(facadeRepoviewPackage + "." + interfaceName));
|
implClass.addImportedType(new FullyQualifiedJavaType(facadeViewRepositoryPackage + "." + interfaceName));
|
||||||
// 注解&工具类
|
// 注解&工具类
|
||||||
implClass.addImportedType(new FullyQualifiedJavaType("org.springframework.stereotype.Repository"));
|
implClass.addImportedType(new FullyQualifiedJavaType("org.springframework.stereotype.Repository"));
|
||||||
implClass.addImportedType(new FullyQualifiedJavaType("javax.annotation.Resource"));
|
implClass.addImportedType(new FullyQualifiedJavaType("javax.annotation.Resource"));
|
||||||
@@ -279,6 +255,8 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
|
|||||||
method.addException(new FullyQualifiedJavaType("Throwable"));
|
method.addException(new FullyQualifiedJavaType("Throwable"));
|
||||||
|
|
||||||
// 方法体
|
// 方法体
|
||||||
|
method.addBodyLine("// clone new example");
|
||||||
|
method.addBodyLine("example = example.cloneExample();");
|
||||||
method.addBodyLine("example.usePage(1, 1);");
|
method.addBodyLine("example.usePage(1, 1);");
|
||||||
method.addBodyLine("List<" + modelClassName + "> dataList = getList(example);");
|
method.addBodyLine("List<" + modelClassName + "> dataList = getList(example);");
|
||||||
method.addBodyLine("if (dataList != null && !dataList.isEmpty()) {");
|
method.addBodyLine("if (dataList != null && !dataList.isEmpty()) {");
|
||||||
@@ -300,6 +278,9 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
|
|||||||
// 参数名匹配示例(首字母小写)
|
// 参数名匹配示例(首字母小写)
|
||||||
method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
|
method.addParameter(new Parameter(new FullyQualifiedJavaType(exampleClassName), "example"));
|
||||||
method.addException(new FullyQualifiedJavaType("Throwable"));
|
method.addException(new FullyQualifiedJavaType("Throwable"));
|
||||||
|
|
||||||
|
method.addBodyLine("// clone new example");
|
||||||
|
method.addBodyLine("example = example.cloneExample();");
|
||||||
method.addBodyLine("List<" + modelClassName + "> result = null;");
|
method.addBodyLine("List<" + modelClassName + "> result = null;");
|
||||||
method.addBodyLine("long startTime = new Date().getTime();");
|
method.addBodyLine("long startTime = new Date().getTime();");
|
||||||
if (hasBLOBColumns) {
|
if (hasBLOBColumns) {
|
||||||
@@ -313,9 +294,16 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
|
|||||||
}
|
}
|
||||||
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
|
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
|
||||||
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
|
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
|
||||||
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"Select " + modelClassName + " view list use long time: \" + useTime + \"ms\" +");
|
method.addBodyLine("String exampleString = \"\";");
|
||||||
method.addBodyLine(" \"\\n\\t|-> criteria: \" + example.getOredCriteria() +");
|
method.addBodyLine("if (example.getWhereString() != null) {");
|
||||||
method.addBodyLine(" \"\\n\\t|-> order by: \" + example.getOrderByClause() +");
|
method.addBodyLine("exampleString += \"\\n\\t|-> where: \" + example.getWhereString();");
|
||||||
|
method.addBodyLine("}");
|
||||||
|
method.addBodyLine("if (example.getOrderByClause() != null) {");
|
||||||
|
method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();");
|
||||||
|
method.addBodyLine("}");
|
||||||
|
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " view list use long time\" +");
|
||||||
|
method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +");
|
||||||
|
method.addBodyLine(" exampleString +");
|
||||||
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
|
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
|
||||||
method.addBodyLine(");");
|
method.addBodyLine(");");
|
||||||
method.addBodyLine("}");
|
method.addBodyLine("}");
|
||||||
@@ -336,13 +324,22 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter {
|
|||||||
method.addException(new FullyQualifiedJavaType("Throwable"));
|
method.addException(new FullyQualifiedJavaType("Throwable"));
|
||||||
|
|
||||||
// 方法体
|
// 方法体
|
||||||
|
method.addBodyLine("// clone new example");
|
||||||
|
method.addBodyLine("example = example.cloneExample();");
|
||||||
method.addBodyLine("long startTime = new Date().getTime();");
|
method.addBodyLine("long startTime = new Date().getTime();");
|
||||||
method.addBodyLine("long count = " + mapperFieldName + ".countByExample(example);");
|
method.addBodyLine("long count = " + mapperFieldName + ".countByExample(example);");
|
||||||
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
|
method.addBodyLine("long useTime = new Date().getTime() - startTime;");
|
||||||
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
|
method.addBodyLine("if (useTime > " + slowQueryLoggerTime + ") {");
|
||||||
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"Select " + modelClassName + " view count use long time: \" + useTime + \"ms\" +");
|
method.addBodyLine("String exampleString = \"\";");
|
||||||
method.addBodyLine(" \"\\n\\t|-> criteria: \" + example.getOredCriteria() +");
|
method.addBodyLine("if (example.getWhereString() != null) {");
|
||||||
method.addBodyLine(" \"\\n\\t|-> order by: \" + example.getOrderByClause() +");
|
method.addBodyLine("exampleString += \"\\n\\t|-> where: \" + example.getWhereString();");
|
||||||
|
method.addBodyLine("}");
|
||||||
|
method.addBodyLine("if (example.getOrderByClause() != null) {");
|
||||||
|
method.addBodyLine("exampleString += \"\\n\\t|-> order by: \" + example.getOrderByClause();");
|
||||||
|
method.addBodyLine("}");
|
||||||
|
method.addBodyLine("LOGGER." + slowQueryLoggerLevel + "(\"[SQL] select " + modelClassName + " view count use long time\" +");
|
||||||
|
method.addBodyLine(" \"\\n\\t|-> use time:\" + useTime + \"ms\" +");
|
||||||
|
method.addBodyLine(" exampleString +");
|
||||||
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
|
method.addBodyLine(" \"\\n\\t|-----------------------------------\"");
|
||||||
method.addBodyLine(");");
|
method.addBodyLine(");");
|
||||||
method.addBodyLine("}");
|
method.addBodyLine("}");
|
||||||
|
|||||||
@@ -9,6 +9,17 @@ import static org.mybatis.generator.internal.util.messages.Messages.getString;
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class ElementTools {
|
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列数据
|
* 检测数据表是否含有BLOB列数据
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user