Mybatis <foreach>在<when>中失效

在Mybatis的XML映射文件中,遇到使用<foreach>标签时,在<when>内无法正常识别集合list,导致解析错误。文章指出在这种情况下,建议改用<if>标签进行动态条件判断,以实现相同的功能。这是一个关于MybatisXML配置和动态SQL常见的技术问题。

Mybatis <foreach>在<when>中无法使用,会找不到集合list,只能使用<if>动态解析

UPDATE SIEBEL.CX_ORDER_ITEM <set> <trim prefix="POLICY_BASE_RULE = CASE" suffix="END,"> <foreach collection="list" item="item"> <if test="item.policyBaseRule != null and item.policyBaseRule !=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.policyBaseRule} </if> </foreach> ELSE POLICY_BASE_RULE </trim> <trim prefix="PACKAGE_NAME = CASE" suffix="END,"> <foreach collection="list" item="item"> <if test="item.packageName != null and item.packageName !=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.packageName} </if> </foreach> ELSE PACKAGE_NAME </trim> <trim prefix="PACKAGE_PRICE = CASE" suffix="END,"> <foreach collection="list" item="item"> <if test="item.packagePrice != null and item.packagePrice !=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.packagePrice} </if> </foreach> ELSE PACKAGE_PRICE </trim> <trim prefix="ACCOUNTING_PRICE = CASE" suffix="END,"> <foreach collection="list" item="item"> <if test="item.accountingPrice != null and item.accountingPrice !=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.accountingPrice} </if> </foreach> ELSE ACCOUNTING_PRICE </trim> <trim prefix="QUANTITY = CASE" suffix="END,"> <foreach collection="list" item="item"> <if test="item.quantity != null and item.quantity!=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.quantity} </if> </foreach> ELSE QUANTITY </trim> <trim prefix="CONTRACT_PRICE = CASE" suffix="END,"> <foreach collection="list" item="item"> <if test="item.contractPrice != null and item.contractPrice !=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.contractPrice} </if> </foreach> ELSE CONTRACT_PRICE </trim> <trim prefix="SETTLE_PRICE = CASE" suffix="END,"> <foreach collection="list" item="item"> <if test="item.settlePrice != null and item.settlePrice !=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.settlePrice} </if> </foreach> ELSE SETTLE_PRICE </trim> <trim prefix="PACKAGE_CODE = CASE" suffix="END,"> <foreach collection="list" item="item"> <if test="item.packageCode != null and item.packageCode !=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.packageCode} </if> </foreach> ELSE PACKAGE_CODE </trim> <trim prefix="SALES_PRICE = CASE" suffix="END,"> <foreach collection="list" item="item"> <if test="item.salesPrice != null and item.salesPrice !=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.salesPrice} </if> </foreach> ELSE SALES_PRICE </trim> <trim prefix="POLICY_TYPE = CASE" suffix="END,"> <foreach collection="list" item="item"> <if test="item.policyType != null and item.policyType !=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.policyType} </if> </foreach> ELSE POLICY_TYPE </trim> <trim prefix="CONTRACT_CODE = CASE" suffix="END,"> <foreach collection="list" item="item"> <if test="item.contractCode != null and item.contractCode !=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.contractCode} </if> </foreach> ELSE CONTRACT_CODE </trim> <trim prefix="LOGISTICS_STATUS = CASE" suffix="END,"> <foreach collection="list" item="item"> <if test="item.logisticsStatus != null and item.logisticsStatus !=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.logisticsStatus} </if> </foreach> ELSE LOGISTICS_STATUS </trim> <trim prefix="SETTLE_STATUS = CASE" suffix="END"> <foreach collection="list" item="item"> <if test="item.settleStatus != null and item.settleStatus !=''"> WHEN ROW_ID = #{item.rowId} THEN #{item.settleStatus} </if> </foreach> ELSE SETTLE_STATUS </trim> </set> WHERE ROW_ID IN <foreach collection="list" item="item" open="(" separator="," close=")"> #{item.rowId} </foreach> </update> 这样写有啥问题 对应ORACLE
07-17
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值