diseaseMap;
+
+ //getter setter toString
+}
+```
+
+进行查询
+```java
+PatientVO1 patientVO1 = patientMapper.selectOneWithRelationsByQueryAs(QueryWrapper.create().orderBy(PatientVO1::getPatientId, false).limit(1), PatientVO1.class);
+System.out.println(JSON.toJSONString(patientVO1));
+```
+
+其执行的 SQL 如下:
+
+```sql
+SELECT `patient_id`, `name`, `disease_ids`, `tag_ids` FROM `tb_patient` ORDER BY `patient_id` DESC LIMIT 1;
+
+SELECT disease_id, name FROM `tb_disease` WHERE `disease_id` IN ('1', '2', '3', '4');
+SELECT `tag_id`, `name` FROM `tb_tag` WHERE `tag_id` IN (1, 2, 3);
+SELECT `disease_id`, `name` FROM `tb_disease` WHERE `disease_id` IN ('1', '2', '3', '4');
+```
+
+查询结果:
+```json
+{
+ "patientId": 4,
+ "name": "赵六",
+ "diseaseIds": "1,2,3,4",
+ "tagIds": "1/2/3",
+ "diseaseNameList": [
+ "心脑血管疾病",
+ "消化系统疾病",
+ "神经系统疾病",
+ "免疫系统疾病"
+ ],
+ "tagList": [
+ {
+ "name": "VIP",
+ "tagId": 1
+ },
+ {
+ "name": "JAVA开发",
+ "tagId": 2
+ },
+ {
+ "name": "Web开发",
+ "tagId": 3
+ }
+ ],
+ "diseaseMap": {
+ "1": {
+ "diseaseId": "1",
+ "name": "心脑血管疾病"
+ },
+ "2": {
+ "diseaseId": "2",
+ "name": "消化系统疾病"
+ },
+ "3": {
+ "diseaseId": "3",
+ "name": "神经系统疾病"
+ },
+ "4": {
+ "diseaseId": "4",
+ "name": "免疫系统疾病"
+ }
+ }
+}
+```
## 多对一 `@RelationManyToOne`
diff --git a/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/RelationOneToMany.java b/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/RelationOneToMany.java
index 35314fae..c352631b 100644
--- a/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/RelationOneToMany.java
+++ b/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/RelationOneToMany.java
@@ -34,6 +34,12 @@ public @interface RelationOneToMany {
*/
String selfField() default "";
+ /**
+ * 当前字段值根据字符串分割
+ * @return 分割字符串
+ */
+ String splitBy() default "";
+
/**
*
* 目标实体类对应的表的 schema 模式。
diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/OneToMany.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/OneToMany.java
index 08e8472a..ed6fad0a 100644
--- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/OneToMany.java
+++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/OneToMany.java
@@ -35,6 +35,7 @@ class OneToMany extends ToManyRelation {
, annotation.extraCondition()
, annotation.selectColumns());
+ this.splitBy = annotation.splitBy();
this.orderBy = annotation.orderBy();
this.limit = annotation.limit();
diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/ToManyRelation.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/ToManyRelation.java
index 0eb6756b..607e9367 100644
--- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/ToManyRelation.java
+++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/ToManyRelation.java
@@ -29,6 +29,8 @@ class ToManyRelation extends AbstractRelation {
protected FieldWrapper mapKeyFieldWrapper;
protected String orderBy;
protected long limit = 0;
+ protected String splitBy;
+
public ToManyRelation(String selfField, String targetSchema, String targetTable, String targetField, String valueField,
@@ -42,6 +44,34 @@ class ToManyRelation extends AbstractRelation {
);
}
+ /**
+ * 构建查询目标对象的 QueryWrapper
+ *
+ * @param targetValues 条件的值
+ * @return QueryWrapper
+ */
+ @Override
+ public QueryWrapper buildQueryWrapper(Set