2016-12-12 2 views
1

を送る私のコードです:MyBatisの関係1、私はMyBatisのを使用している、と私は1対1の関係を持っていますが、私はここで、複数のパラメータを送信したいマルチパラメータ

@Mapper 
public interface ParentMapper { 
    @Select("select o.id, o.name, o.key from parent o where o.key=#{key}") 
    @Result({ 
     @Result(column = "id", property = "id") 
     @Result(column = "name", property = "name") 
     @Result(column = "id", property = "child", [email protected](select = "getChild")) 
    }) 
    List<Parent> getParents(@Param("key") String key, @Param("childKey") String childKey); 

    @Select("select id, childName, childKey from child where parentId=#{parentId} and childKey = #{childKey}") 
    Child getChild(@Param("parentId")String parentId, @Param("childKey") String childKey); 
} 

あなたが見ることができるように論理的には、私はParentのリストを取得し、2つのパラメータを送信します:親のid、childKey、子を取得する。 しかし、@ one注釈を使用するにはどうすればいいですか?

+0

スニペットはfalseです。埋め込みアノテーションは '@ Results'で、' @ Result'の各行の間にカンマがありません。 – blackwizard

答えて

0

Here is a similar question。 マッピング結果には両方の列を指定する必要があります。 これらはXMLを使用していますが、アノテーションベースのマッピングで転置可能である可能性があります。私はこれまでこれをやっていませんでしたが。 とにかく、私は第2列が何であるかわかりません。

さらに、遅延読み込みを使用しない場合:@One(fetchType=FetchType.LAZY, select="getChild")、N + 1選択のポイントが表示されません。 SQL JOINの方が優れていて、全体の構造が1つのクエリで構築されている方がよいでしょう。

関連する問題