2017-12-11 37 views
0

これはほとんど機能しています。mybatis resultMapの関連付けを使用してオブジェクトのjava.util.Listを選択し、選択する方法

<mapper namespace="com.xyz.rb.dao.RBCellDao"> 
    <resultMap id="rbCellResultMap" type="com.xyz.rb.model.RBCell"> 
     <id property="id" column="id" /> 
     <result property="fieldIds" column="fieldIds" typeHandler="com.xyz.dao.typehandlers.CommaSeparatedLongListTypeHandler" /> 
     <association property="fields" column="fieldIds" javaType="java.util.List" select="selectFields"></association> 
    </resultMap> 

    <select id="selectFields" parameterType="String" resultType="com.xyz.abc.model.Field"> 
     SELECT * FROM fields WHERE id IN (#{value}) <!-- this appears to get the correct value ====> Parameters: 1,2,3(String) --> 
    </select> 
</mapper> 

RBCell表データのようになります。期待どおりこれはリストを返して

| ID | FIELDIDS  | 
| 1 | 1,2,3   | 
| 2 | 45,54321,9,78 | 

、しかし、どんなにFieldIds列にあるどのような値のリストでしか1つのエントリがあります。.. 。

私はここで何が欠けていますか?最初のものだけではなく、Fieldのリスト全体を返すにはどうしたらいいですか?

答えて

0

メインクエリと関連クエリの間では、パラメータは文字列です。あなたがin事をしたい場合は、MySQLを使用すると仮定

SELECT * FROM fields WHERE id IN ('1,2,3'); 

、あなたがfind_in_set試すことができます:エルス

SELECT * FROM fields WHERE FIND_IN_SET(id, #{value}); 

、あなたがするlikeを試すことができますので、ちょうどこのように関連するクエリでパラメータを使用しますこの。

+0

私の質問にお答えいただき、ありがとうございます。問題はクエリではないと私は考えています。クエリは正常に動作するようです。私が考える問題は、mybatisがresultMapとassociationタグを使ってどのように設定されているかです。つまり、最初のSQLで説明したとおりにパラメータを使用しています。 – kasdega

+0

いいえ、あなたは私の精巧さを誤解しています。最初のクエリは、私の解決策ではなく、クエリの仕組みを説明したい、もう1つは問題を解決する方法です。もちろん、あなたが下に出てきた答えも同様に働きます。 @kasdega – Blank

0

これは単純に変更することになった:

SELECT * ID IN($ {値})フィールドFROM(#{値})内のID SELECT * にフィールドFROM

それは、今働く。

関連する問題