fields = ReflectionKit.getFieldList(ClassUtils.getUserClass(mpjTableInfo.getTableInfo().getEntityType()));
for (Field field : fields) {
if (existMapping) {
- MPJMapping mapping = field.getAnnotation(MPJMapping.class);
+ EntityMapping mapping = field.getAnnotation(EntityMapping.class);
+ if (mapping != null) {
+ mpjFieldList.add(new MPJTableFieldInfo(mpjTableInfo.getTableInfo().getEntityType(), mapping, field));
+ }
+ }
+ if (existMappingField) {
+ FieldMapping mapping = field.getAnnotation(FieldMapping.class);
if (mapping != null) {
mpjFieldList.add(new MPJTableFieldInfo(mpjTableInfo.getTableInfo().getEntityType(), mapping, field));
}
@@ -526,5 +520,4 @@ public class MPJTableInfoHelper {
/* 映射字段列表 */
mpjTableInfo.setFieldList(mpjFieldList);
}
-
}
diff --git a/src/main/java/com/github/yulichang/annotation/MPJMapping.java b/src/main/java/com/github/yulichang/annotation/EntityMapping.java
similarity index 95%
rename from src/main/java/com/github/yulichang/annotation/MPJMapping.java
rename to src/main/java/com/github/yulichang/annotation/EntityMapping.java
index 3cec144..33fa0e0 100644
--- a/src/main/java/com/github/yulichang/annotation/MPJMapping.java
+++ b/src/main/java/com/github/yulichang/annotation/EntityMapping.java
@@ -4,7 +4,7 @@ package com.github.yulichang.annotation;
import java.lang.annotation.*;
/**
- * 关系映射注解
+ * 实体类关系映射注解
*
* @author yulichang
* @since 1.2.0
@@ -12,7 +12,7 @@ import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
-public @interface MPJMapping {
+public @interface EntityMapping {
/**
* 关联的数据库实体类
@@ -56,7 +56,7 @@ public @interface MPJMapping {
* 如果此类是以map方式查询的
* 并且查询出来的map的key不是thisField对应的数据库列名就需要设置
*/
- String joinMapKsy() default "";
+ String joinMapKey() default "";
/**
* 映射表查询条件之 select
diff --git a/src/main/java/com/github/yulichang/annotation/FieldMapping.java b/src/main/java/com/github/yulichang/annotation/FieldMapping.java
new file mode 100644
index 0000000..0832794
--- /dev/null
+++ b/src/main/java/com/github/yulichang/annotation/FieldMapping.java
@@ -0,0 +1,89 @@
+package com.github.yulichang.annotation;
+
+
+import java.lang.annotation.*;
+
+/**
+ * 字段关系映射注解
+ *
+ * @author yulichang
+ * @since 1.2.0
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
+public @interface FieldMapping {
+
+ /**
+ * 关联的数据库实体类
+ * 默认获取此注解所对应的类
+ */
+ Class> tag();
+
+ /**
+ * 当前类的关联的字段名称 (是实体类字段名称而不是数据库字段名称)
+ * 默认获取当前类上定义的主键 @TableId
+ */
+ String thisField() default "";
+
+ /**
+ * 关联类的字段名称 (是实体类字段名称而不是数据库字段名称)
+ * 默认获取关联类上定义的主键 @TableId
+ */
+ String joinField() default "";
+
+ /**
+ * 一对一查询时 如果查询到多条记录是否抛出异常
+ * true 抛出异常
+ * false 不抛异常,获取列表第一条数据
+ */
+ boolean isThrowExp() default true;
+
+ /**
+ * 字段映射对应的属性名
+ */
+ String select();
+
+ /**
+ * 针对查询结果map的时候使用
+ * 默认为thisField对应的数据库列名
+ *
+ * 如果此类是以map方式查询的
+ * 并且查询出来的map的key不是thisField对应的数据库列名就需要设置
+ */
+ String thisMapKey() default "";
+
+ /**
+ * isMap为true时生效
+ * 针对查询结果map的时候使用
+ * 默认为joinField对应的数据库列名
+ *
+ * 如果此类是以map方式查询的
+ * 并且查询出来的map的key不是thisField对应的数据库列名就需要设置
+ */
+ String joinMapKey() default "";
+
+ /**
+ * 映射表查询条件之 first
+ * 等效于 Wrappers.query().first(xxx);
+ */
+ String first() default "";
+
+ /**
+ * 映射表查询条件之 apply
+ * 等效于 Wrappers.query().apply(xxx);
+ */
+ MPJMappingApply[] apply() default {};
+
+ /**
+ * 映射表查询条件
+ */
+ MPJMappingCondition[] condition() default {};
+
+ /**
+ * 映射表查询条件之 last
+ * 建议不要在这使用分页语句,会导致关联查的时候查询不全
+ * 等效于 Wrappers.query().last(xxx);
+ */
+ String last() default "";
+}
diff --git a/src/main/java/com/github/yulichang/annotation/MPJTableAlias.java b/src/main/java/com/github/yulichang/annotation/MPJTableAlias.java
index b4a89f3..0a5f067 100644
--- a/src/main/java/com/github/yulichang/annotation/MPJTableAlias.java
+++ b/src/main/java/com/github/yulichang/annotation/MPJTableAlias.java
@@ -3,12 +3,12 @@ package com.github.yulichang.annotation;
import java.lang.annotation.*;
/**
- * 关联查询时的表别名
- * 框架默认会随机生成 一般是 t1 t2 t3 ...
- * 不要在程序中使用随机别名,运行期间是不变的,但是重启就不一定了
- * 如需使用请配合此注解一起使用
+ * 关联查询时的表别名
+ * 框架默认会随机生成 一般是 t1 t2 t3 ...
+ * 不要在程序中使用随机别名,运行期间是不变的,但是重启就不一定了
+ * 如需使用请配合此注解一起使用
*
- * 这个注解定义的表别名或者随机生成的别名只对MPJLambdaWrapper生效
+ * 这个注解定义的表别名或者随机生成的别名只对MPJLambdaWrapper生效
* 对MPJQueryWrapper不生效,
*
* @author yulichang
@@ -21,5 +21,5 @@ import java.lang.annotation.*;
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
public @interface MPJTableAlias {
- String value() default "";
+ String value();
}
diff --git a/src/main/java/com/github/yulichang/base/mapper/MPJDeepMapper.java b/src/main/java/com/github/yulichang/base/mapper/MPJDeepMapper.java
index 6f9cc69..85c8dc5 100644
--- a/src/main/java/com/github/yulichang/base/mapper/MPJDeepMapper.java
+++ b/src/main/java/com/github/yulichang/base/mapper/MPJDeepMapper.java
@@ -190,6 +190,40 @@ public interface MPJDeepMapper extends BaseMapper {
return queryMapping(selectList(queryWrapper), property);
}
+ /**
+ * 根据 Wrapper 条件,查询全部记录
+ *
+ * @param queryWrapper 实体对象封装操作类(可以为 null)
+ */
+ default List