1.情景展示
oracle数据库中,需要根据指定字段内容调用加密程序后,根据主键id进行更新其对应的字段mindex_id的值;
加密通过Java实现,然后通过Java对其进行更新;
Java使用的sqlMap框架是ibatis,ibatis结合oracle如何实现批量更新?
2.解决方案
sqlMap如何写?
1 <!-- 批量更新 --> 2 <update id="updatePRIMARY_INDEX2" parameterClass="java.util.ArrayList"> 3 UPDATE PRIMARY_INDEX2 SET MINDEX_ID = 4 <iterate conjunction="" open="CASE ID" close="END"> 5 <![CDATA[ 6 WHEN #list[].ID# THEN #list[].MINDEX_ID# 7 ]]> 8 </iterate> 9 WHERE ID IN 10 <!-- in()不能超过1000 --> 11 <iterate conjunction="," open="(" close=")"> 12 #list[].ID# 13 </iterate> 14 </update>
相当于oracle中的
1 UPDATE PRIMARY_INDEX2 2 SET MINDEX_ID = CASE ID 3 WHEN '235886' THEN 4 '6' 5 WHEN '235885' THEN 6 '5' 7 WHEN '235884' THEN 8 '4' 9 WHEN '235883' THEN 10 '3' 11 WHEN '235882' THEN 12 '2' 13 WHEN '235881' THEN 14 '1' 15 END 16 WHERE ID IN ('235886', '235885', '235884', '235883', '235882', '235881');
说明:oracle的in()函数有限制,里面的个数不能超过1000个。