Skip to content

Commit e05d686

Browse files
committed
add resultmapId to @many and @one
1 parent bf01fee commit e05d686

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

src/main/java/org/apache/ibatis/annotations/Many.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@
3333
@Retention(RetentionPolicy.RUNTIME)
3434
@Target({})
3535
public @interface Many {
36+
/**
37+
* Returns the id that retrieves result map.
38+
*
39+
* @return the id that retrieves result map.
40+
*/
41+
String resultMapId() default "";
3642
/**
3743
* Returns the statement id that retrieves collection.
3844
*

src/main/java/org/apache/ibatis/annotations/One.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@
3333
@Retention(RetentionPolicy.RUNTIME)
3434
@Target({})
3535
public @interface One {
36+
/**
37+
* Returns the id that retrieves result map.
38+
*
39+
* @return the id that retrieves result map.
40+
*/
41+
String resultMapId() default "";
3642
/**
3743
* Returns the statement id that retrieves single object.
3844
*

src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ private void applyResults(Result[] results, Class<?> resultType, List<ResultMapp
552552
result.javaType() == void.class ? null : result.javaType(),
553553
result.jdbcType() == JdbcType.UNDEFINED ? null : result.jdbcType(),
554554
hasNestedSelect(result) ? nestedSelectId(result) : null,
555-
null,
555+
hasNestedResultMap(result) ? nestedResultMapId(result) : null,
556556
null,
557557
null,
558558
typeHandler,
@@ -564,6 +564,24 @@ private void applyResults(Result[] results, Class<?> resultType, List<ResultMapp
564564
}
565565
}
566566

567+
private String nestedResultMapId(Result result) {
568+
String resultMapId = result.one().resultMapId();
569+
if (resultMapId.length() < 1) {
570+
resultMapId = result.many().resultMapId();
571+
}
572+
if (!resultMapId.contains(".")) {
573+
resultMapId = type.getName() + "." + resultMapId;
574+
}
575+
return resultMapId;
576+
}
577+
578+
private boolean hasNestedResultMap(Result result) {
579+
if (result.one().resultMapId().length() > 0 && result.many().resultMapId().length() > 0) {
580+
throw new BuilderException("Cannot use both @One and @Many annotations in the same @Result");
581+
}
582+
return result.one().resultMapId().length() > 0 || result.many().resultMapId().length() > 0;
583+
}
584+
567585
private String nestedSelectId(Result result) {
568586
String nestedSelect = result.one().select();
569587
if (nestedSelect.length() < 1) {

0 commit comments

Comments
 (0)