diff --git a/docs/zh/base/relations-query.md b/docs/zh/base/relations-query.md index eb77a80c..1496989e 100644 --- a/docs/zh/base/relations-query.md +++ b/docs/zh/base/relations-query.md @@ -352,6 +352,111 @@ public class Account implements Serializable { } ``` +Relation结果集只使用某个字段值-`since v1.6.6` + +`RelationOneToOne`、`RelationOneToMany`、`RelationManyToOne`、`RelationManyToMany`新增属性`targetFieldBind` +```java {7-11} + /** + * 目标对象的关系实体类的属性绑定 + *
+ * 当字段不为空串时,只进行某个字段赋值(使用对应字段类型接收)
+ * @return 属性名称
+ */
+ String targetFieldBind() default "";
+```
+> 注解其他属性配置使用不变,当配置了`targetFieldBind`值时,只提取目标对象关系实体类的该属性
+>
+> 注意:因为不是对象接收,所以该配置需要强制配置注解`targetTable`属性(因为是某个字段接收,并不是某个实体对应的表,所以需要增加`targetTable`获取目标表信息
+>
+> 示例场景:有个业务有个操作日志,操作日志中有个createBy(操作人字段),此时在日志详情或者说日志列表中需要显示操作人名称,且只需要这一个字段,此时使用实体接收会导致不必要的字段出现,接口文档也会变得混乱。该场景也可以使用`Field Query`和`Join Query`实现
+>
+假设一个账户
+- 每个账户有一个唯一对应的`id_number`列在表`tb_id_card`中
+- 每个账户拥有多个订单`tb_user_order`
+- 一个账户可以有多个角色,一个角色也可以分配给多个账户,他们通过中间表`tb_user_role`进行关系映射
+
+```java {7-11}
+@Table("tb_user")
+public class UserVO5 implements Serializable {
+ private static final long serialVersionUID = 474700189859144273L;
+
+ @Id
+ private Integer userId;
+ private String userName;
+ private String password;
+
+ @RelationOneToOne(
+ selfField = "userId",
+ targetTable = "tb_id_card",
+ targetField = "id",
+ targetFieldBind = "idNumber"
+ )
+ //该处可以定义其他属性名,不一定要是目标对象的字段名
+ private String idNumberCustomFieldName;
+
+ @RelationOneToMany(
+ selfField = "userId",
+ targetTable = "tb_user_order",
+ targetField = "userId",
+ targetFieldBind = "orderId"
+ )
+ private List
* 当字段不为空串时,只进行某个字段赋值(使用对应字段类型接收)
* @return 属性名称
diff --git a/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/RelationManyToOne.java b/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/RelationManyToOne.java
index 287a177b..5f605e62 100644
--- a/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/RelationManyToOne.java
+++ b/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/RelationManyToOne.java
@@ -68,7 +68,7 @@ public @interface RelationManyToOne {
String targetField() default "";
/**
- * 目标实体类的字段绑定
+ * 目标对象的关系实体类的属性绑定
*
* 当字段不为空串时,只进行某个字段赋值(使用对应字段类型接收)
* @return 属性名称
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 91aafab0..29730ab9 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
@@ -68,7 +68,7 @@ public @interface RelationOneToMany {
String targetField();
/**
- * 目标实体类的字段绑定
+ * 目标对象的关系实体类的属性绑定
*
* 当字段不为空串时,只进行某个字段赋值(使用对应字段类型接收)
* @return 属性名称
diff --git a/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/RelationOneToOne.java b/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/RelationOneToOne.java
index b12d6759..895e36d2 100644
--- a/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/RelationOneToOne.java
+++ b/mybatis-flex-annotation/src/main/java/com/mybatisflex/annotation/RelationOneToOne.java
@@ -68,7 +68,7 @@ public @interface RelationOneToOne {
String targetField();
/**
- * 目标实体类的字段绑定
+ * 目标对象的关系实体类的属性绑定
*
* 当字段不为空串时,只进行某个字段赋值(使用对应字段类型接收)
* @return 属性名称
diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/UserVO5.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/UserVO5.java
index 7589fbdd..3ca6fd9c 100644
--- a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/UserVO5.java
+++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/UserVO5.java
@@ -93,4 +93,16 @@ public class UserVO5 implements Serializable {
public void setRoleNameList(List