У меня есть вопрос о Mappers в Mybatis. У меня есть два класса, как это:
public class A{
private String A1;
private String A2;
private List<B> listB;
//getters and setters
.
.
.
public static class B {
private String B1;
private String B2;
//getters and setters
.
.
.
}
}
Тогда у меня есть класс маппер, как это:
@Mapper
public interface ABMapper{
@Select("select b1,b2 from b where b.a1 = #{a1}")
public List<B> getBs(@Param("a1") String a1);
@Select ("select a1,a2 from a limit 100")
@Results({
@Result(property="a1", value = "a1"),
@Result(property="a2", value = "a2"),
@Result(property="listB", column="a1", many = @Many(select = "getBs"))
})
public List<A> getAs();
}
Это работает нормально, но я знаю, что когда getAs()
выполняется, getBs запускаетсястолько раз, сколько предметов (например, предел 100). Интересно, что если существует способ выполнить запрос типа select a.a1,a.a2,b.b1,b.b2 from a a inner join b b on a.a1 = b.a1
, а затем Mybatis (и Java) могут сгруппировать элементы в List<A>
, а атрибут B не будет пустым. Возможно, в классе А и В нужно использовать хеш и равно, но я не знаю.
Спасибо за ваши ответы.