MyBatis:通过一个查询中的注释进行收集

我有一个xml映射器 – 一个选择和一个结果映射器。 它没有问题。 但我想使用注释。 我的映射器:

        

所以我确实喜欢这个

  @Results({ @Result(id=true, property="id", column="Id"), @Result(property="comment", column="Comment"), ///,??? }) public List select(); 

我无法理解如何通过注释映射我的集合而不再执行一个sql查询。 正如我发现的所有示例都假设执行了一个查询。 请帮忙。

AFAIK,如果使用带注释的映射,则不能使用JOIN

从文档中 ,关于@Many的用法,

映射到复杂类型的集合属性。 属性:select,它是映射语句的完全限定名称(即mapper方法),可以加载适当类型的实例集合fetchType,后者取代此映射的全局配置参数lazyLoadingEnabled。 注意您会注意到Annotations API不支持连接映射。 这是由于Java Annotations中的限制不允许循环引用。

如果您愿意,可以直接将ResultMap与注释一起使用:

 @Select("SELECT QUERY") @ResultMap("readItemsRM") public List select(); 

我发现你可以在MyBatis上使用Java注释实际进行一对多或一对一的连接

 public class Master { private String nama; private Short usia; private List contohs; } public interface MasterMapper { @Select("SELECT master.nama, master.usia FROM test.master WHERE master.nama = #{nama}") @Results(value = { @Result(property="nama", column="nama"), @Result(property="usia", column="usia"), @Result(property="contohs", javaType=List.class, column="nama", many=@Many(select="getContohs")) }) Master selectUsingAnnotations(String nama); @Select("SELECT contoh.id, contoh.nama, contoh.alamat " + " FROM test.contoh WHERE contoh.nama = #{nama}") List getContohs(String nama); } 

此链接中有更多详细信息