Mybatis中的批量修改,批量删除,批量新增,和新增后返回主键

1. 批量修改,批量删除,批量新增

    1)批量更新

	<update id="dwdatalink_delete_task_instances_byids" parameterType="java.util.Map"> 		
		UPDATE
			data_link_task_run
		SET
			is_deleted = '1',
			sys_update = CURRENT_TIMESTAMP,
    		sys_oper = #{owner}
    	WHERE
    		id IN 
   <!--对传入参数中的idList进行遍历,遍历时的标识为item,遍历后使用()包起来,每个元素用‘,’隔开-->
    	<foreach collection="idList" item="item" open="(" separator="," close=")" > 
    		#{item}
		</foreach>	      
	</update>

    传入的参数:  

{owner=sys, idList=[7, 8, 9, 10]}

2)批量新增和批量删除类似与批量修改,只是批量新增时foreach包裹的是values里面的内容,逗号分隔;批量删除时,包裹的是WHERE过滤条件,使用‘AND’进行分隔,且不需要open和close。

2. 新增后返回主键

    <insert id="dwdatalink_add_task_quartz" parameterType="java.util.Map" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
    	<selectKey keyProperty="id" resultType="java.lang.Long" order="AFTER">
		SELECT LAST_INSERT_ID()
		</selectKey>
    	INSERT INTO 
    		data_link_task_quartz (cron_express, owner, sys_create, sys_oper)
    	VALUES
			(#{cronExpress}, #{owner}, CURRENT_TIMESTAMP, #{owner})
    </insert>

 该ID必须是自增的,返回的ID会放入入参对象中,本例是map,

        m.put("id", null);
		int insertQuartz = commonDataSourceLinkDao.insert("dwdatalink_add_task_quartz", m);
		if(insertQuartz > 0) {
			timeRef = (Long)m.get("id");
		} else {
			logger.error("CRON表达式插入失败");
			throw new Exception("任务新增失败!");
		}

也就是需要先在map中存在以id为key的键值对,新增完毕后,使用get方法取出id的值即可。

上一篇:Oracle自己写的找出索引体积比表大的索引


下一篇:绩效沟通季的瓜不好吃,小心下一个吃瓜的是你?