我想实现的效果是:更新cap_fo_order表的订单状态=待审核、时间=当前,更新条件是订单id在(id1,id2,id3等多个)范围中并且(订单状态 = “01” and 订单状态的描述 = “初始化”) 。这也就意味着我必须传递多个不同类型的参数。
话不多说,上代码展示:
//FoOrderRepository文件批量的更新数据库的表
Integer updateMulity(@Param("orderStatus") String orderStatus, @Param("orderStatusDesc") String orderStatusDesc, @Param("updateTime") Date updateTime, @Param("whereIds") List<String> whereIds, @Param("whereOrderStatusAndDesc") Map<String, String> whereOrderStatusAndDesc);
//FoOrderMapper文件的批量更新数据库表的sql
Integer updateMulity(@Param("orderStatus") String orderStatus, @Param("orderStatusDesc") String orderStatusDesc, @Param("updateTime") Date updateTime, @Param("whereIds") List<String> whereIds, @Param("whereOrderStatusAndDesc") Map<String, String> whereOrderStatusAndDesc);
//Mybatis中的sql语句
<update id="updateMulity" parameterType="java.util.Map" > UPDATE cap_fo_order SET status = #{orderStatus,jdbcType=VARCHAR}, status_desc = #{orderStatusDesc,jdbcType=VARCHAR}, update_time = #{updateTime,jdbcType=TIMESTAMP}WHERE id in <foreach collection="whereIds" item="item" index="index" open="(" separator="," close=")" > #{item} </foreach> and <foreach collection="whereOrderStatusAndDesc" item="item" index="index" open="(" separator="or" close=")" > (status = #{index} and status_desc = #{item}) </foreach> </update>
//最后在serviceImpl层进行事物级别的校验,防止脏数据和被篡改
Integer updateResult = foOrderService.updateMulity(orderStatus, orderStatusDesc, updateTime, whereIds, whereOrderStatusAndDesc);
assertEquals("Error:cancleOrTradeRefund -> updateMulity - 批量更新操作失败。",new Integer(orderIdArray.size()), updateResult);