今天有个业务需求,在新增某数据的时候,要求批量操作,批量插入或者覆盖(更新)等,本来是想分步骤,1.查询是否存在 2.根据1的结果选择insert或update语句
或者全部用insert,但是那样就得搭上一个delete语句,但是怎么看都是笨到家了。
项目现在用的SSM,mybatis里有很多方法可以处理这种情况,我选择的方式是ON DUPLICATE KEY UPDATE句式。这种方法可以放在insert标签内。完整语句是这样的:
<insert id="uploadPlanItemCache" >
INSERT INTO t_ms_check_plan_item (
p_id,i_id,vehicle_type,i_type,record,record_remark,big_item,i_position,small_item,
checkman_name,create_id,create_name,create_time)
VALUES
<foreach collection="list" item="queryParam" separator="," close=";">
(#{queryParam.planId}, #{queryParam.itemId}, #{queryParam.vehicleType},#{queryParam.itemType},
#{queryParam.record},#{queryParam.recordRemark},#{queryParam.bigItem},#{queryParam.itemPosition},
#{queryParam.smallItem},#{queryParam.checkMan},#{queryParam.userId},#{queryParam.userName},NOW())
ON DUPLICAT