From 6a072a57ba8f314f727d7d50a368f6718901dc11 Mon Sep 17 00:00:00 2001 From: guanmengyuan Date: Sun, 22 Oct 2023 22:11:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DfieldMapping=20?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E7=B1=BB=E5=9E=8B=E6=9F=A5=E8=AF=A2null?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mybatisflex/core/field/FieldQueryManager.java | 4 ++++ .../java/com/mybatisflex/core/table/TableInfoFactory.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/field/FieldQueryManager.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/field/FieldQueryManager.java index 59f586d2..35e16de4 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/field/FieldQueryManager.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/field/FieldQueryManager.java @@ -26,6 +26,8 @@ import com.mybatisflex.core.util.CollectionUtil; import java.lang.reflect.Array; import java.util.*; +import static com.mybatisflex.core.table.TableInfoFactory.defaultSupportColumnTypes; + /** * 属性查询管理。 * @@ -87,6 +89,8 @@ public class FieldQueryManager { Class componentType = filedType.getComponentType(); List objects = mapper.selectListByQueryAs(queryWrapper, componentType); value = getArrayValue(componentType, objects); + } else if (defaultSupportColumnTypes.contains(filedType)) { + value = mapper.selectObjectByQueryAs(queryWrapper, filedType); } else { value = mapper.selectOneByQueryAs(queryWrapper, filedType); // 循环查询嵌套类 diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfoFactory.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfoFactory.java index 5146439e..152d983b 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfoFactory.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfoFactory.java @@ -50,7 +50,7 @@ public class TableInfoFactory { private TableInfoFactory() { } - static final Set> defaultSupportColumnTypes = CollectionUtil.newHashSet( + public static final Set> defaultSupportColumnTypes = CollectionUtil.newHashSet( int.class, Integer.class, short.class, Short.class, long.class, Long.class, From 2458f7dabe3e5f66dd613e033e88c0d627f7cea3 Mon Sep 17 00:00:00 2001 From: guanmengyuan Date: Mon, 23 Oct 2023 09:51:42 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DfieldMapping=20?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E7=B1=BB=E5=9E=8B=E6=9F=A5=E8=AF=A2null?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisflex/test/model/FieldMapping.java | 66 +++++++++++++++++ .../test/model/FieldMappingInner.java | 71 +++++++++++++++++++ .../src/main/resources/application.yml | 2 +- .../src/main/resources/field_mapping_test.sql | 12 ++++ .../test/service/FieldMappingTest.java | 30 ++++++++ 5 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/FieldMapping.java create mode 100644 mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/FieldMappingInner.java create mode 100644 mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/resources/field_mapping_test.sql create mode 100644 mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/service/FieldMappingTest.java diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/FieldMapping.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/FieldMapping.java new file mode 100644 index 00000000..fc885479 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/FieldMapping.java @@ -0,0 +1,66 @@ +package com.mybatisflex.test.model; + + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import com.mybatisflex.core.activerecord.Model; +import com.mybatisflex.core.keygen.KeyGenerators; + +import java.util.Date; +import java.util.Objects; + + +@Table("field_mapping") +public class FieldMapping extends Model { + @Id(keyType = KeyType.Generator,value = KeyGenerators.snowFlakeId) + private String id; + @Column(ignore = true) + private Date innerDate; + + public String getId() { + return id; + } + + public static FieldMapping create() { + return new FieldMapping(); + } + + public FieldMapping setId(String id) { + this.id = id; + return this; + } + + public Date getInnerDate() { + return innerDate; + } + + public FieldMapping setInnerDate(Date innerDate) { + this.innerDate = innerDate; + return this; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + FieldMapping that = (FieldMapping) o; + return Objects.equals(id, that.id) && Objects.equals(innerDate, that.innerDate); + } + + @Override + public int hashCode() { + return Objects.hash(id, innerDate); + } + + @Override + public String toString() { + return "FieldMapping{" + + "id='" + id + '\'' + + ", innerDate=" + innerDate + + '}'; + } + +} + diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/FieldMappingInner.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/FieldMappingInner.java new file mode 100644 index 00000000..5c77e6ae --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/FieldMappingInner.java @@ -0,0 +1,71 @@ +package com.mybatisflex.test.model; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import com.mybatisflex.core.activerecord.Model; +import com.mybatisflex.core.keygen.KeyGenerators; + +import java.util.Date; +import java.util.Objects; + +@Table("field_mapping_inner") +public class FieldMappingInner extends Model { + @Id(keyType = KeyType.Generator,value = KeyGenerators.snowFlakeId) + private String id; + private String outId; + private Date createDate; + + public static FieldMappingInner create() { + return new FieldMappingInner(); + } + + public String getId() { + return id; + } + + public FieldMappingInner setId(String id) { + this.id = id; + return this; + } + + public String getOutId() { + return outId; + } + + public FieldMappingInner setOutId(String outId) { + this.outId = outId; + return this; + } + + public Date getCreateDate() { + return createDate; + } + + public FieldMappingInner setCreateDate(Date createDate) { + this.createDate = createDate; + return this; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + FieldMappingInner that = (FieldMappingInner) o; + return Objects.equals(id, that.id) && Objects.equals(outId, that.outId) && Objects.equals(createDate, that.createDate); + } + + @Override + public int hashCode() { + return Objects.hash(id, outId, createDate); + } + + @Override + public String toString() { + return "FieldMappingInner{" + + "id='" + id + '\'' + + ", outId='" + outId + '\'' + + ", createDate=" + createDate + + '}'; + } +} diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/resources/application.yml b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/resources/application.yml index 0ce252f9..c6e3ecb6 100644 --- a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/resources/application.yml +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/resources/application.yml @@ -7,7 +7,7 @@ spring: # driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/flex_test username: root - password: 12345678 + password: Aa123456# # driver-class-name: # datasource: # driver-class-name: org.h2.Driver diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/resources/field_mapping_test.sql b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/resources/field_mapping_test.sql new file mode 100644 index 00000000..b71203a7 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/resources/field_mapping_test.sql @@ -0,0 +1,12 @@ +create table field_mapping +( + id varchar(255) not null + primary key +); +create table field_mapping_inner +( + id varchar(255) not null + primary key, + out_id varchar(255) null, + create_date timestamp null +); diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/service/FieldMappingTest.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/service/FieldMappingTest.java new file mode 100644 index 00000000..0ce0887e --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/service/FieldMappingTest.java @@ -0,0 +1,30 @@ +package com.mybatisflex.test.service; + +import com.mybatisflex.test.mapper.FieldMappingInnerMapper; +import com.mybatisflex.test.mapper.FieldMappingMapper; +import com.mybatisflex.test.model.FieldMapping; +import com.mybatisflex.test.model.FieldMappingInner; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.Date; + +@SpringBootTest +public class FieldMappingTest { + @Autowired + FieldMappingMapper fieldMappingMapper; + @Autowired + FieldMappingInnerMapper fieldMappingInnerMapper; + @Test + void testFieldMapping() { + String fieldId = FieldMapping.create().saveOpt().get().getId(); + FieldMappingInner.create().setCreateDate(new Date()).setOutId(fieldId).save(); + FieldMapping.create() + .withFields() + .fieldMapping(FieldMapping::getInnerDate, con -> + FieldMappingInner.create().select(FieldMappingInner::getCreateDate).where(FieldMappingInner::getOutId).eq(con.getId()).toQueryWrapper() + ) + .list().forEach(System.out::println); + } +}