背景
今天写代码的时候,写了一段sql,如下所示:
<!-- 获取已购买产品列表 -->
<select id="listMySubscription" resultMap="ProductSubscriptionPO"
parameterType="com.money56.ifmp.api.module.bm.vo.ProductSubscriptionVO">
select
product_name,product_type,subscription_id,product_period,subscription_begin,interest_begin,interest_end,subscription_status,subscription_principle,subscription_time
from bm_subscription a left join bm_product b on a.product_id =
b.product_id
where 1=1
<if test="memberId != null and memberId != ''">
and a.member_id = #{memberId,jdbcType=CHAR}
</if>
<if test="productType != null and productType != ''">
and b.product_type = #{productType,jdbcType=INTEGER}
</if>
<if test="subscriptionStatusList != null">
AND a.subscription_status in
<foreach collection="subscriptionStatusList" item="status"
open="(" separator="," close=")">
#{status}
</foreach>
</if>
</select>
通过foreach对认购状态的不断筛选,取出结果。运行,发现抛了一个异常:
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '__frch_status_0' in 'class
解决
对foreach代码段进行修改,如下所示:
<foreach collection="subscriptionStatusList" item="status" open="(" separator="," close=")">
'${status}'
</foreach>
运行,成功取出数据。
原因分析
经代码验证,mybatis传入一个list使用#无问题,但是传入一个对象,对象里面有list就只能使用$。