2016-11-08 10 views
0

フィルタ条件に対して実行する事前クエリが必要であり、実際のフェッチを実行するために結果を渡す必要があります。MyBatis @Resultプロパティの代わりに自己オブジェクトにマップする

私は、オブジェクト全体の代わりに名前付きパラメータに結果をマップするにはどうすればよい
@Select("Select * from Table_a where id in (#{id, mode=IN, jdbcType=INTEGER})") 
ClassA getA(Integer id); 

@Select("select id from Table_b where X=#{xValue, mode=IN, jdbcType=VARCHAR}") 
@Results(value = { @Result(property = "this", column = "ID", one = @One(select = "getA")) }) 
ClassA getAfromB(String xValue); 

次のよう

Select * from Table_a where id in (select id from Table_b where X=?) 

MyBatisのマッパーに見えますか?

私はClassBのインスタンスを取得し、ClassAにgetterを使用することができます。 直接の方法はありますか?または このようなフィルタ結果を追加する方法はmyBatisで利用できますか?

+0

は、なぜあなたが選択するいずれかでこれをやっていませんか? '@Select(Select * from Table_a idはTable_bからidを選択します。ここではX =#{xValue、mode = IN、jdbcType = VARCHAR}))") ClassA getA(整数ID); ' – griFlo

+0

断片化アプローチを使用して別々の表を一緒に維持する 表Bに関連する変更があった場合dosenotはtableAを使用して問合せを変更する必要がある – Rajadurai

答えて

-1

確かに、単一のクエリは十分です、そしてより良い結合を使用してサブ選択避ける:

SELECT * FROM Table_A a JOIN Table_B b ON a.id = b.id AND b.X=#{xValue, mode=IN, jdbcType=VARCHAR} 
関連する問題