我有这个几乎工作。
<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列表而不是看起来只是第一个?
答案 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})
现在有效。