diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java index 3baf7de3..b220ef16 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java @@ -16,6 +16,8 @@ package com.mybatisflex.core; import com.mybatisflex.core.exception.FlexExceptions; +import com.mybatisflex.core.field.FieldQuery; +import com.mybatisflex.core.field.FieldQueryBuilder; import com.mybatisflex.core.mybatis.MappedStatementTypes; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.provider.EntitySqlProvider; @@ -28,9 +30,12 @@ import com.mybatisflex.core.util.ObjectUtil; import com.mybatisflex.core.util.StringUtil; import org.apache.ibatis.annotations.*; import org.apache.ibatis.builder.annotation.ProviderContext; +import org.apache.ibatis.reflection.MetaObject; +import org.apache.ibatis.reflection.SystemMetaObject; import java.io.Serializable; import java.util.*; +import java.util.function.Consumer; import static com.mybatisflex.core.query.QueryMethods.count; @@ -407,6 +412,59 @@ public interface BaseMapper { List selectListByQuery(@Param(FlexConsts.QUERY) QueryWrapper queryWrapper); + default List selectListByQuery(@Param(FlexConsts.QUERY) QueryWrapper queryWrapper + , Consumer>... consumers) { + + List list = selectListByQuery(queryWrapper); + if (list == null || list.isEmpty()) { + return Collections.emptyList(); + } + + list.forEach(entity -> { + for (Consumer> consumer : consumers) { + FieldQueryBuilder fieldQueryBuilder = new FieldQueryBuilder<>(entity); + consumer.accept(fieldQueryBuilder); + FieldQuery fieldQuery = fieldQueryBuilder.build(); + QueryWrapper childQuery = fieldQuery.getQueryWrapper(); + MetaObject entityMetaObject = SystemMetaObject.forObject(entity); + Class setterType = entityMetaObject.getSetterType(fieldQuery.getField()); + + Class mappingType = fieldQuery.getMappingType(); + if (mappingType == null) { + if (setterType.isAssignableFrom(Collection.class)) { + throw new IllegalStateException("Mapping Type can not be null for query Many."); + } else if (setterType.isArray()) { + mappingType = setterType.getComponentType(); + } else { + mappingType = setterType; + } + } + + Object value; + try { + MappedStatementTypes.setCurrentType(mappingType); + if (setterType.isAssignableFrom(List.class)) { + value = selectListByQueryAs(childQuery, mappingType); + } else if (setterType.isAssignableFrom(Set.class)) { + value = selectListByQueryAs(childQuery, mappingType); + value = new HashSet<>((Collection) value); + } else if (setterType.isArray()) { + value = selectListByQueryAs(childQuery, mappingType); + value = ((List) value).toArray(); + } else { + value = selectOneByQueryAs(childQuery, mappingType); + } + } finally { + MappedStatementTypes.clear(); + } + entityMetaObject.setValue(fieldQuery.getField(), value); + } + }); + + return list; + } + + /** * 根据 query 来构建条件查询数据列表,要求返回的数据为 asType * 这种场景一般用在 left join 时,有多出了 entity 本身的字段内容,可以转换为 dto、vo 等场景时 @@ -418,6 +476,69 @@ public interface BaseMapper { @SelectProvider(type = EntitySqlProvider.class, method = "selectListByQuery") List selectListByQueryAs(@Param(FlexConsts.QUERY) QueryWrapper queryWrapper, Class asType); + + default List selectListByQueryAs(@Param(FlexConsts.QUERY) QueryWrapper queryWrapper, Class asType + , Consumer>... consumers) { + List list; + try { + MappedStatementTypes.setCurrentType(asType); + list = selectListByQueryAs(queryWrapper, asType); + } finally { + MappedStatementTypes.clear(); + } + + if (list == null || list.isEmpty()) { + return Collections.emptyList(); + } + + list.forEach(entity -> { + for (Consumer> consumer : consumers) { + FieldQueryBuilder fieldQueryBuilder = new FieldQueryBuilder<>(entity); + consumer.accept(fieldQueryBuilder); + FieldQuery fieldQuery = fieldQueryBuilder.build(); + QueryWrapper childQuery = fieldQuery.getQueryWrapper(); + + MetaObject entityMetaObject = SystemMetaObject.forObject(entity); + Class setterType = entityMetaObject.getSetterType(fieldQuery.getField()); + + Class mappingType = fieldQuery.getMappingType(); + if (mappingType == null) { + if (setterType.isAssignableFrom(Collection.class)) { + throw new IllegalStateException("Mapping Type can not be null for query Many."); + } else if (setterType.isArray()) { + mappingType = setterType.getComponentType(); + } else { + mappingType = setterType; + } + } + + Object value; + try { + MappedStatementTypes.setCurrentType(mappingType); + if (setterType.isAssignableFrom(List.class)) { + value = selectListByQueryAs(childQuery, mappingType); + } else if (setterType.isAssignableFrom(Set.class)) { + value = selectListByQueryAs(childQuery, mappingType); + value = new HashSet<>((Collection) value); + } else if (setterType.isArray()) { + value = selectListByQueryAs(childQuery, mappingType); + value = ((List) value).toArray(); + } else { + value = selectOneByQueryAs(childQuery, mappingType); + } + } finally { + MappedStatementTypes.clear(); + } + + + entityMetaObject.setValue(fieldQuery.getField(), value); + } + }); + + return list; + } + + /** * 查询全部数据 * diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/EntitySqlProvider.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/EntitySqlProvider.java index 995eda14..abd49e53 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/EntitySqlProvider.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/EntitySqlProvider.java @@ -18,16 +18,17 @@ package com.mybatisflex.core.provider; import com.mybatisflex.core.dialect.DialectFactory; import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.query.CPI; +import com.mybatisflex.core.query.QueryTable; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.table.TableInfo; +import com.mybatisflex.core.table.TableInfoFactory; import com.mybatisflex.core.util.ArrayUtil; import com.mybatisflex.core.util.CollectionUtil; +import com.mybatisflex.core.util.StringUtil; import org.apache.ibatis.builder.annotation.ProviderContext; import java.io.Serializable; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; public class EntitySqlProvider { @@ -76,7 +77,6 @@ public class EntitySqlProvider { } - /** * insertBatch 的 sql 构建 * @@ -308,19 +308,41 @@ public class EntitySqlProvider { if (queryWrapper == null) { throw FlexExceptions.wrap("queryWrapper can not be null."); } + List tableInfos = getTableInfos(context, queryWrapper); + for (TableInfo tableInfo : tableInfos) { + tableInfo.appendConditions(null, queryWrapper); - TableInfo tableInfo = ProviderUtil.getTableInfo(context); - tableInfo.appendConditions(null, queryWrapper); + Object[] values = CPI.getValueArray(queryWrapper); + ProviderUtil.setSqlArgs(params, values); - Object[] values = CPI.getValueArray(queryWrapper); - ProviderUtil.setSqlArgs(params, values); - - CPI.setSelectColumnsIfNecessary(queryWrapper, tableInfo.getDefaultQueryColumn()); - CPI.setFromIfNecessary(queryWrapper, tableInfo.getTableName()); + CPI.setSelectColumnsIfNecessary(queryWrapper, tableInfo.getDefaultQueryColumn()); + CPI.setFromIfNecessary(queryWrapper, tableInfo.getTableName()); + } return DialectFactory.getDialect().forSelectByQuery(queryWrapper); } + + private static List getTableInfos(ProviderContext context, QueryWrapper queryWrapper) { + List tableInfos; + List queryTables = CPI.getQueryTables(queryWrapper); + if (CollectionUtil.isNotEmpty(queryTables)) { + tableInfos = new ArrayList<>(); + for (QueryTable queryTable : queryTables) { + String tableName = queryTable.getName(); + if (StringUtil.isNotBlank(tableName)) { + TableInfo tableInfo = TableInfoFactory.ofTableName(tableName); + if (tableInfo != null) { + tableInfos.add(tableInfo); + } + } + } + } else { + tableInfos = Collections.singletonList(ProviderUtil.getTableInfo(context)); + } + return tableInfos; + } + /** * selectCountByQuery 的 sql 构建 * @@ -335,13 +357,17 @@ public class EntitySqlProvider { throw FlexExceptions.wrap("queryWrapper can not be null."); } - TableInfo tableInfo = ProviderUtil.getTableInfo(context); - tableInfo.appendConditions(null, queryWrapper); + List tableInfos = getTableInfos(context, queryWrapper); - Object[] values = CPI.getValueArray(queryWrapper); - ProviderUtil.setSqlArgs(params, values); + for (TableInfo tableInfo : tableInfos) { + tableInfo.appendConditions(null, queryWrapper); + + Object[] values = CPI.getValueArray(queryWrapper); + ProviderUtil.setSqlArgs(params, values); + + CPI.setFromIfNecessary(queryWrapper, tableInfo.getTableName()); + } - CPI.setFromIfNecessary(queryWrapper, tableInfo.getTableName()); return DialectFactory.getDialect().forSelectByQuery(queryWrapper); } diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/AccountSqlTester.java b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/AccountSqlTester.java index 45a4d4f7..2babf40e 100644 --- a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/AccountSqlTester.java +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/AccountSqlTester.java @@ -13,8 +13,8 @@ import org.junit.Test; import java.util.Arrays; import static com.mybatisflex.core.query.QueryMethods.*; -import static com.mybatisflex.coretest.table.Tables.ACCOUNT; -import static com.mybatisflex.coretest.table.Tables.ARTICLE; +import static com.mybatisflex.coretest.table.AccountTableDef.ACCOUNT; +import static com.mybatisflex.coretest.table.ArticleTableDef.ARTICLE; public class AccountSqlTester { diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/ArticleSqlTester.java b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/ArticleSqlTester.java index 91dc4fee..e6d84a4c 100644 --- a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/ArticleSqlTester.java +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/ArticleSqlTester.java @@ -8,7 +8,8 @@ import com.mybatisflex.core.table.TableInfoFactory; import com.mybatisflex.core.util.CollectionUtil; import org.junit.Test; -import static com.mybatisflex.coretest.table.Tables.ARTICLE; +import static com.mybatisflex.coretest.table.ArticleTableDef.ARTICLE; + public class ArticleSqlTester { diff --git a/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/QueryEntityProcessor.java b/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/QueryEntityProcessor.java index ccc183c8..dad6de44 100644 --- a/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/QueryEntityProcessor.java +++ b/mybatis-flex-processor/src/main/java/com/mybatisflex/processor/QueryEntityProcessor.java @@ -83,10 +83,29 @@ public class QueryEntityProcessor extends AbstractProcessor { private static final String tableDefTemplate = "\n\n public static final @entityClassTableDef @tableField = new @entityClassTableDef(\"@tableName\");\n"; + private static final String singleEntityClassTemplate = "package @package;\n" + + "\n" + + "import com.mybatisflex.core.query.QueryColumn;\n" + + "import com.mybatisflex.core.table.TableDef;\n" + + "\n" + + "// Auto generate by mybatis-flex, do not modify it.\n" + + "public class @entityClassTableDef extends TableDef {\n" + + "\n" + + "@selfDef" + + "@queryColumns" + + "@defaultColumns" + + "@allColumns" + + "\n" + + " public @entityClassTableDef(String tableName) {\n" + + " super(tableName);\n" + + " }\n" + + "}\n"; - private static final String classTemplate = "\n" + + + private static final String allInTableEntityClassTemplate = "\n" + " public static class @entityClassTableDef extends TableDef {\n" + "\n" + + "@selfDef" + "@queryColumns" + "@defaultColumns" + "@allColumns" + @@ -100,8 +119,7 @@ public class QueryEntityProcessor extends AbstractProcessor { private static final String columnsTemplate = " public QueryColumn @property = new QueryColumn(this, \"@columnName\");\n"; private static final String defaultColumnsTemplate = "\n public QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{@allColumns};\n"; - // private static final String allColumnsTemplate = " public QueryColumn[] ALL_COLUMNS = new QueryColumn[]{@allColumns};\n\n"; - private static final String allColumnsTemplate = " public QueryColumn ALL_COLUMNS = new QueryColumn(this, \"*\");\n\n"; + private static final String allColumnsTemplate = " public QueryColumn ALL_COLUMNS = new QueryColumn(this, \"*\");\n"; private Filer filer; private Elements elementUtils; @@ -132,6 +150,8 @@ public class QueryEntityProcessor extends AbstractProcessor { String baseMapperClass = props.getProperties().getProperty("processor.baseMapperClass", "com.mybatisflex.core.BaseMapper"); String mappersGenerateEnable = props.getProperties().getProperty("processor.mappersGenerateEnable", "false"); String genMappersPackage = props.getProperties().getProperty("processor.mappersPackage"); + + boolean allInTables = "true".equalsIgnoreCase(props.getProperties().getProperty("processor.allInTables", "false")); String className = props.getProperties().getProperty("processor.tablesClassName", "Tables"); //upperCase, lowerCase, upperCamelCase, lowerCamelCase @@ -142,7 +162,6 @@ public class QueryEntityProcessor extends AbstractProcessor { StringBuilder guessPackage = new StringBuilder(); - StringBuilder tablesContent = new StringBuilder(); roundEnv.getElementsAnnotatedWith(Table.class).forEach((Consumer) entityClassElement -> { @@ -184,7 +203,16 @@ public class QueryEntityProcessor extends AbstractProcessor { } } - tablesContent.append(buildTablesClass(entitySimpleName, tableName, propertyAndColumns, defaultColumns, tablesNameStyle)); + if (allInTables) { + String content = buildTablesClass(entitySimpleName, tableName, propertyAndColumns, defaultColumns, tablesNameStyle, null, allInTables); + tablesContent.append(content); + } + //每一个 entity 生成一个独立的文件 + else { + String realGenPackage = genTablesPackage == null || genTablesPackage.trim().length() == 0 ? guessPackage.toString() : genTablesPackage; + String content = buildTablesClass(entitySimpleName, tableName, propertyAndColumns, defaultColumns, tablesNameStyle, realGenPackage, allInTables); + genClass(genPath, realGenPackage, entitySimpleName + "TableDef", content); + } //是否开启 mapper 生成功能 if ("true".equalsIgnoreCase(mappersGenerateEnable) && table.mapperGenerateEnable()) { @@ -194,7 +222,7 @@ public class QueryEntityProcessor extends AbstractProcessor { } }); - if (tablesContent.length() > 0) { + if (allInTables && tablesContent.length() > 0) { String realGenPackage = genTablesPackage == null || genTablesPackage.trim().length() == 0 ? guessPackage.toString() : genTablesPackage; genTablesClass(genPath, realGenPackage, className, tablesContent.toString()); } @@ -300,7 +328,7 @@ public class QueryEntityProcessor extends AbstractProcessor { private String buildTablesClass(String entityClass, String tableName, Map propertyAndColumns - , List defaultColumns, String tablesNameStyle) { + , List defaultColumns, String tablesNameStyle, String realGenPackage, boolean allInTables) { // tableDefTemplate = " public static final @entityClassTableDef @tableField = new @entityClassTableDef(\"@tableName\");\n"; @@ -312,7 +340,7 @@ public class QueryEntityProcessor extends AbstractProcessor { //columnsTemplate = " public QueryColumn @property = new QueryColumn(this, \"@columnName\");\n"; StringBuilder queryColumns = new StringBuilder(); propertyAndColumns.forEach((property, column) -> - queryColumns.append(columnsTemplate + queryColumns.append(columnsTemplate.substring(allInTables ? 0 : 4) //移除 4 个空格 .replace("@property", buildName(property, tablesNameStyle)) .replace("@columnName", column) )); @@ -349,12 +377,24 @@ public class QueryEntityProcessor extends AbstractProcessor { // " }\n" + // " }\n"; - String tableClass = classTemplate.replace("@entityClass", entityClass) - .replace("@queryColumns", queryColumns) - .replace("@defaultColumns", defaultColumnsString) - .replace("@allColumns", allColumnsString); + String tableClass; + if (allInTables) { + tableClass = allInTableEntityClassTemplate.replace("@entityClass", entityClass) + .replace("@queryColumns", queryColumns) + .replace("@defaultColumns", defaultColumnsString) + .replace("@allColumns", allColumnsString); + } else { + tableClass = singleEntityClassTemplate + .replace("@package", realGenPackage) + .replace("@entityClass", entityClass) + .replace("@selfDef", tableDef.replace("\n\n", "") + "\n") + .replace("@queryColumns", queryColumns) + .replace("@defaultColumns", "\n" + defaultColumnsString.substring(5)) //移除 "换行 + 4 个空格" + .replace("@allColumns", allColumnsString.substring(4)); //移除 4 个空格 + } - return tableDef + tableClass; + + return allInTables ? tableDef + tableClass : tableClass; } @@ -363,6 +403,11 @@ public class QueryEntityProcessor extends AbstractProcessor { .replace("@classesInfo", classContent) .replace("@tablesClassName", className); + genClass(genBasePath, genPackageName, className, genContent); + } + + + private void genClass(String genBasePath, String genPackageName, String className, String genContent) { Writer writer = null; try { JavaFileObject sourceFile = filer.createSourceFile(genPackageName + "." + className); @@ -370,8 +415,6 @@ public class QueryEntityProcessor extends AbstractProcessor { writer = sourceFile.openWriter(); writer.write(genContent); writer.flush(); - -// printMessage(">>>>> mybatis-flex success generate tables class: \n" + sourceFile.toUri()); return; } @@ -408,9 +451,6 @@ public class QueryEntityProcessor extends AbstractProcessor { writer = new PrintWriter(new FileOutputStream(genJavaFile)); writer.write(genContent); writer.flush(); - -// printMessage(">>>>> mybatis-flex success generate tables class: \n" + genJavaFile.toURI()); - } catch (IOException e) { e.printStackTrace(); } finally { @@ -440,64 +480,7 @@ public class QueryEntityProcessor extends AbstractProcessor { .replace("@baseMapperClzName", baseMapperClzName); String mapperClassName = entityName + "Mapper"; - Writer writer = null; - try { - JavaFileObject sourceFile = filer.createSourceFile(genPackageName + "." + mapperClassName); - if (genBasePath == null || genBasePath.trim().length() == 0) { - writer = sourceFile.openWriter(); - writer.write(genContent); - writer.flush(); - -// printMessage(">>>>> mybatis-flex success generate mapper class: \n" + sourceFile.toUri()); - return; - } - - - String defaultGenPath = sourceFile.toUri().getPath(); - - //真实的生成代码的目录 - String realPath; - - //用户配置的路径为绝对路径 - if (isAbsolutePath(genBasePath)) { - realPath = genBasePath; - } - //配置的是相对路径,那么则以项目根目录为相对路径 - else { - String projectRootPath = getProjectRootPath(defaultGenPath); - realPath = new File(projectRootPath, genBasePath).getAbsolutePath(); - } - - //通过在 test/java 目录下执行编译生成的 - boolean fromTestSource = isFromTestSource(defaultGenPath); - if (fromTestSource) { - realPath = new File(realPath, "src/test/java").getAbsolutePath(); - } else { - realPath = new File(realPath, "src/main/java").getAbsolutePath(); - } - - File genJavaFile = new File(realPath, (genPackageName + "." + mapperClassName).replace(".", "/") + ".java"); - if (!genJavaFile.getParentFile().exists() && !genJavaFile.getParentFile().mkdirs()) { - System.out.println(">>>>>ERROR: can not mkdirs by mybatis-flex processor for: " + genJavaFile.getParentFile()); - return; - } - - writer = new PrintWriter(new FileOutputStream(genJavaFile)); - writer.write(genContent); - writer.flush(); - -// printMessage(">>>>> mybatis-flex success generate mapper class: \n" + genJavaFile.toURI()); - - } catch (IOException e) { - e.printStackTrace(); - } finally { - if (writer != null) { - try { - writer.close(); - } catch (IOException ignored) { - } - } - } + genClass(genBasePath, genPackageName, mapperClassName, genContent); } @@ -595,8 +578,6 @@ public class QueryEntityProcessor extends AbstractProcessor { /** * 当前 Maven 模块所在所在的目录 - * - * @return */ private String getModuleRootPath(String genFilePath) { File file = new File(genFilePath); diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/Account.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/Account.java index b99b58ad..73554126 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/Account.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/Account.java @@ -8,6 +8,7 @@ import javax.validation.constraints.NotBlank; import java.io.Serializable; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; @Table(value = "tb_account", dataSource = "ds2", onSet = AccountOnSetListener.class) @@ -32,6 +33,8 @@ public class Account extends BaseEntity implements Serializable, AgeAware { @Column(isLogicDelete = true) private Boolean isDelete; + private List
articles; + public Long getId() { return id; @@ -82,6 +85,21 @@ public class Account extends BaseEntity implements Serializable, AgeAware { options.put(key, value); } + public Boolean getDelete() { + return isDelete; + } + + public void setDelete(Boolean delete) { + isDelete = delete; + } + + public List
getArticles() { + return articles; + } + + public void setArticles(List
articles) { + this.articles = articles; + } @Override public String toString() { @@ -92,6 +110,7 @@ public class Account extends BaseEntity implements Serializable, AgeAware { ", birthday=" + birthday + ", options=" + options + ", isDelete=" + isDelete + + ", articles=" + articles + '}'; } } diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/EntityTestStarter.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/EntityTestStarter.java index 3592a9ec..f3de3932 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/EntityTestStarter.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/EntityTestStarter.java @@ -28,8 +28,8 @@ import javax.sql.DataSource; import java.util.List; import static com.mybatisflex.core.query.QueryMethods.select; -import static com.mybatisflex.test.table.Tables.ACCOUNT; -import static com.mybatisflex.test.table.Tables.ARTICLE; +import static com.mybatisflex.test.table.AccountTableDef.ACCOUNT; +import static com.mybatisflex.test.table.ArticleTableDef.ARTICLE; public class EntityTestStarter { @@ -55,6 +55,17 @@ public class EntityTestStarter { AccountMapper accountMapper = bootstrap.getMapper(AccountMapper.class); + + List accounts1 = accountMapper.selectListByQuery(QueryWrapper.create() + , accountFieldQueryBuilder -> accountFieldQueryBuilder + .field(Account::getArticles) + .type(Article.class) + .queryWrapper(entity -> + select().from(ARTICLE).where(ARTICLE.ACCOUNT_ID.eq(entity.getId())) + ) + ); + System.out.println(accounts1); + // MyAccountMapper myAccountMapper = bootstrap.getMapper(MyAccountMapper.class); // List accounts1 = myAccountMapper.selectAll(); @@ -86,8 +97,8 @@ public class EntityTestStarter { QueryWrapper asWrapper = QueryWrapper.create() .select(ARTICLE.ALL_COLUMNS) .select(ACCOUNT.USER_NAME.as(ArticleDTO::getAuthorName) - ,ACCOUNT.AGE.as(ArticleDTO::getAuthorAge) - ,ACCOUNT.BIRTHDAY + , ACCOUNT.AGE.as(ArticleDTO::getAuthorAge) + , ACCOUNT.BIRTHDAY ) .from(ARTICLE) .leftJoin(ACCOUNT).on(ARTICLE.ACCOUNT_ID.eq(ACCOUNT.ID)) @@ -99,7 +110,6 @@ public class EntityTestStarter { System.out.println(paginate); - // QueryWrapper queryWrapper = new QueryWrapper(); // queryWrapper.where(ACCOUNT.ID.in( // select(ACCOUNT.ID).from(ACCOUNT).where(ACCOUNT.ID.in( @@ -112,7 +122,6 @@ public class EntityTestStarter { // System.out.println(paginate); - // QueryWrapper query = QueryWrapper.create() // .where(ACCOUNT.ID.in( // select(ACCOUNT.ID).from(ACCOUNT) diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/RowTestStarter.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/RowTestStarter.java index 8912807c..c7ec5f77 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/RowTestStarter.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/RowTestStarter.java @@ -31,7 +31,7 @@ import javax.sql.DataSource; import java.util.ArrayList; import java.util.List; -import static com.mybatisflex.test.table.Tables.ACCOUNT; +import static com.mybatisflex.test.table.AccountTableDef.ACCOUNT; public class RowTestStarter { diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/TenantTester.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/TenantTester.java index fa9e41a3..e268e947 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/TenantTester.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/TenantTester.java @@ -28,8 +28,8 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import javax.sql.DataSource; import static com.mybatisflex.core.query.QueryMethods.select; -import static com.mybatisflex.test.table.Tables.ACCOUNT; -import static com.mybatisflex.test.table.Tables.TENANT_ACCOUNT; +import static com.mybatisflex.test.table.AccountTableDef.ACCOUNT; +import static com.mybatisflex.test.table.TenantAccountTableDef.TENANT_ACCOUNT; public class TenantTester { diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/WrapperSerializeTest.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/WrapperSerializeTest.java index 41255236..bb1bde4e 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/WrapperSerializeTest.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/WrapperSerializeTest.java @@ -6,7 +6,7 @@ import com.alibaba.fastjson2.JSONWriter; import com.mybatisflex.core.query.QueryWrapper; import org.nustaq.serialization.FSTConfiguration; -import static com.mybatisflex.test.table.Tables.ACCOUNT; +import static com.mybatisflex.test.table.AccountTableDef.ACCOUNT; public class WrapperSerializeTest { diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/resources/data.sql b/mybatis-flex-test/mybatis-flex-native-test/src/main/resources/data.sql index cb1d23cf..6734810a 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/resources/data.sql +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/resources/data.sql @@ -5,4 +5,5 @@ VALUES (1, '张三', 18, 0,'2020-01-11', null,0), INSERT INTO tb_article VALUES (1, 1,'标题1', '内容1',0), - (2, 2,'标题2', '内容2',0); + (2, 2,'标题2', '内容2',0), + (3, 1,'标题3', '内容3',0); diff --git a/mybatis-flex-test/mybatis-flex-spring-test/src/test/java/com/mybatisflex/test/AccountTest.java b/mybatis-flex-test/mybatis-flex-spring-test/src/test/java/com/mybatisflex/test/AccountTest.java index 2788f1aa..4b4f882f 100644 --- a/mybatis-flex-test/mybatis-flex-spring-test/src/test/java/com/mybatisflex/test/AccountTest.java +++ b/mybatis-flex-test/mybatis-flex-spring-test/src/test/java/com/mybatisflex/test/AccountTest.java @@ -14,7 +14,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.util.List; -import static com.mybatisflex.test.model.table.Tables.ACCOUNT; +import static com.mybatisflex.test.model.table.AccountTableDef.ACCOUNT; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = AppConfig.class)