场景
在进行数据插入时,需要根据唯一索引(有时是联合索引,联合索引确定唯一一条记录)进行插入数据,当有更新的数据到来时,能及时更新已保存的记录数据;以往的经验是,根据唯一索引,先查询一下,是否有该条记录,如果有,更新指定字段值后,再进行一次updateById操作,以下介绍一种insertOrUpdate方式,实现插入或更新功能,即当新插入的数据已存在时,进行指定字段更新操作。
实现
/**
* 插入或更新任务状态信息
* key值:task_name,status(需要在数据库中将这两字段标注为唯一索引)
*
* @param entity 待插入或更新的实体
* @return 返回影响的记录数
*/
@Insert("<script>" +
" INSERT INTO a_hotspot_task_status(task_name_parent,task_name,mode_type,status,status_msg,finish_time,handle_node_code,task_length,bandwidth) VALUES " +
" (#{entity.taskNameParent},#{entity.taskName},#{entity.modeType},#{entity.status},#{entity.statusMsg},#{entity.finishTime},#{entity.handleNodeCode},#{entity.taskLength},#{entity.bandwidth})" +
" on duplicate key update task_name = #{entity.taskName},status = #{entity.status}" +
" </script>")
int insertOrUpdate(@Param("entity") HotspotTaskStatus entity);
说明
- 由于是根据唯一索引进行确定唯一记录,所以on duplicate key update之后需要写上索引字段值,如果存在多个,逗号隔开即可
- 在insert into 表名之后的括号内,需要写明字段列表(指定字段插入或更新字段)
网友评论