如何使用mybatis resultMap关联选择对象的java.util.List并选择

时间:2017-12-11 22:39:47

标签: java mybatis

我有这个几乎工作。

<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 |

这是按预期返回List,但是,无论FieldIds列中有什么值,List中只有一个条目......

我在这里缺少什么?我怎样才能让它返回整个Field列表而不是看起来只是第一个?

2 个答案:

答案 0 :(得分:0)

在主查询和关联查询之间,参数完全是字符串。所以在关联查询中使用参数就像这样:

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

如果你想做in事情,假设你使用了mysql,你可以试试find_in_set

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

否则,您可以尝试like来执行此操作。

答案 1 :(得分:0)

这最终只是为了改变:

SELECT * FROM fields WHERE id IN(#{value}) 至 SELECT * FROM fields WHERE id IN($ {value})

现在有效。