on duplicate key update的使用

目录

实体类

控制层

服务层

数据层


在开发中经常会遇到操作数据库时若库中存在则更新,不存在则插入的需求。若是一条一条的查询判断那不得累死啊!在mysql中有 on duplicate key update的语句支持!

实体类

注意此user表中主键为uid,所以在新增修改时会根据uid主键查询;

若主键为id,需要根据某列的值进行新增修改判断唯一值;则需要创建索引;比如考勤信息中,表中有id,uid,fadate(打卡日期)需要以工号、考勤信息为组合索引,在导入时判断 某日期某工号是否已存在,存在则更新,不存在则插入!

/*** 用户信息表** @author chensir* @date 2024/4/16*/
@Data
@Builder
@TableName("user_info")
@AllArgsConstructor
@NoArgsConstructor
public class UserInfoEntity extends BaseEntity {/*** 工号*/@TableId(value = "uid")private String uid;/*** 姓名*/private String name;/*** 性别*/private String sex;/*** 电话*/private String tel;/*** 邮箱*/private String email;/*** 部门名称*/private String deptName;/*** 岗位名称*/private String postName;/*** 加班控制码 T000固薪制*/private String jbkzm;/*** 职系*/private String grades;/*** 领导工号*/private String leaderUid;/*** 领导姓名*/private String leaderName;/*** 入职日期*/private LocalDate entryTime;/*** 状态 0在职 1离职*/private String status;/*** 离职日期*/private LocalDate dimissionTime;private Integer sort;@TableLogicprivate String delFlag;
}

控制层

 @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)public R<Void> importData(@RequestPart("file") MultipartFile file) throws Exception {ExcelResult<UserInfoImportVo> excelResult = ExcelUtil.importExcel(file.getInputStream(), UserInfoImportVo.class, true);userInfoService.importBatch(excelResult.getList());return R.ok(excelResult.getAnalysis());}

服务层

 void importBatch(List<UserInfoImportVo> list);@Override@Transactional(rollbackFor = Exception.class)public void importBatch(List<UserInfoImportVo> boList) {// 校验excel中是否有重复数据List<String> res = new ArrayList<>();List<UserInfoImportVo> voList = new ArrayList<>();boList.forEach(user -> {if (res.contains(user.getUid())) {throw new HraException("Excel中有重复的信息,请检查工号为:" + user.getUid() + "的数据!");}user.setCreateBy(LoginHelper.getLoginUser().getUsername());user.setCreateName(LoginHelper.getLoginUser().getNickname());user.setCreateTime(LocalDateTime.now());user.setUpdateBy(LoginHelper.getLoginUser().getUsername());user.setUpdateName(LoginHelper.getLoginUser().getNickname());user.setUpdateTime(LocalDateTime.now());res.add(user.getUid());voList.add(user);});int batchSize = 1500;for (int i = 0; i < voList.size(); i += batchSize) {
//            userInfoMapper.resetAutoIncrement();List<UserInfoImportVo> batch = voList.subList(i, Math.min(voList.size(), i + batchSize));userInfoMapper.batchUpsertPurtable(batch);}}

数据层

void batchUpsertPurtable(@Param("query") List<UserInfoImportVo> batch);<insert id="batchUpsertPurtable">insert into user_info(uid,name,sex,tel,email,dept_name,post_name,jbkzm,grades,leader_uid,leader_name,entry_time,status,dimission_time,create_by,create_name,create_time,update_by,update_name,update_time) values<foreach collection="query" separator="," item="item">(#{item.uid},#{item.name},#{item.sex},#{item.tel},#{item.email},#{item.deptName},#{item.postName},#{item.jbkzm},#{item.grades},#{item.leaderUid},#{item.leaderName},#{item.entryTime},#{item.status},#{item.dimissionTime},#{item.createBy},#{item.createName},#{item.createTime},#{item.updateBy},#{item.updateName},#{item.updateTime})</foreach>on duplicate key updatesex= values(sex),tel= values(tel),email= values(email),dept_name= values(dept_name),post_name= values(post_name),jbkzm= values(jbkzm),grades= values(grades),leader_uid= values(leader_uid),leader_name= values(leader_name),entry_time= values(entry_time),status= values(status),dimission_time= values(dimission_time)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/659461.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

追剧新宠:短剧小程序,随时随地看大片

在繁忙的现代生活中&#xff0c;人们越来越追求高效、便捷的娱乐方式。短剧小程序凭借其短小精悍、内容丰富的特点&#xff0c;成为了追剧新宠&#xff0c;让人们随时随地都能沉浸在精彩的故事中。 一、短剧小程序的魅力 随时随地的观影体验&#xff1a;短剧小程序无需下载&…

DPDK 相关

DPDK API GUIDES: DPDK API AND GUIDEShttps://core.dpdk.org/doc/archives/ 18.11: API:https://doc.dpdk.org/api-18.11/ GUIDES:DPDK documentation — Data Plane Development Kit 18.11.11 documentation 19.11 API:DPDK: API GUIDES:DPDK documentation — Data Plane D…

扭蛋机小程序体验:线上扭蛋的无限魅力

随着科技的发展和互联网的普及&#xff0c;传统娱乐方式正逐渐与线上平台相结合&#xff0c;为用户带来全新的体验。扭蛋机小程序&#xff0c;作为这一趋势下的产物&#xff0c;凭借其独特的玩法和无限的魅力&#xff0c;正逐渐成为线上娱乐的新宠。 一、线上扭蛋机小程序的魅力…

家用洗地机怎么选?哪些家用洗地机性价比高?

随着科技的不断发展&#xff0c;智能家居产品逐渐走入我们的生活。其中&#xff0c;洗地机作为一款能够减轻家庭清洁负担的利器&#xff0c;受到了很多消费者的关注。那么&#xff0c;家用洗地机怎么选&#xff1f;本文将为大家详细介绍哪些家用洗地机性价比高。 家用洗地机怎…

PyCharm更换pip源、模块安装、PyCharm依赖包导入导出

一、Pycharm更换安装源 在下载安装好Pycharm后&#xff0c;一个在实际编程开发过程中非常重要的问题是第三方库添加&#xff0c;然而Python默认的源网络速度有点慢&#xff0c;因此&#xff0c;我们常常需要做的是更换Pycharm的安装源。 在当前最新版&#xff08;2022.03版&…

Grafana页面嵌入自建Web应用页面

目录 一、应用场景 二、实现方式 1、修改Grafana配置文件 2、获取监控页面url 3、隐藏左侧和顶部菜单 一、应用场景 需要将Grafana监控页面嵌入自建Web应用页面&#xff0c;使Grafana监控页面成为自建Web应用的一部分。 二、实现方式 总体思路&#xff1a;修改Grafana配…

JAVA系列 小白入门参考资料 类和对象(1)

目录 1. 什么是面向对象 2. 面向对象与面向过程 面向过程 面向对象 3. 类定义和使用 类的定义格式 4. 类的实例化 5. 类和对象的说明 1. 什么是面向对象 Java是一门纯面向对象的语言 (Object Oriented Program &#xff0c;简称 OOP) &#xff0c;在面向对象的世界里…

Odoo17开发环境搭建

1.先下载godoo17_20240227_02.zip压缩包&#xff0c;里面包含了项目用到的所有的插件了&#xff0c;直接使用这个包即可。 下载地址&#xff1a;https://download.csdn.net/download/java173842219/89242257 2.解压该压缩包&#xff0c;目录如下&#xff1a; 3.下载pycharm并…

前端实现将当前页面内容下载成图片(图片可做到高清画质)

插件背景&#xff1a; html2canvas可以把你想要转变的元素变为图片&#xff0c;使用file-saver下载图片。 1、安装html2canvas、file-saver npm install html2canvasnpm install file-saver --save 2、在Vue组件中引入并使用html2canvas、file-saver import html2canvas fro…

工作问题记录(持续更新中)

一、backdrop-filter:blur(20px); 毛玻璃效果&#xff0c;在安卓机上有兼容问题&#xff0c;添加兼容前缀也无效&#xff1b; 解决方案&#xff1a;让设计师调整渐变&#xff0c;不要使用该属性! 复制代码 background: radial-gradient(33% 33% at 100% 5%, #e9e5e5 0%, rgba…

计算机毕业设计php自行车在线租赁管理系统-vue+mysql

本系统的开发使获取自行车在线租赁管理系统信息能够更加方便快捷&#xff0c;同时也使自行车在线租赁管理系统管理信息变的更加系统化、有序化。系统界面较友好&#xff0c;易于操作。 自行车在线租赁管理系统&#xff0c;主要的模块包括首页、个人中心、用户管理、会员管理、自…

QT在线安装列出所有能安装的版本

1.在重装QT时&#xff0c;发现之前的5.15.2的版本不见了。 2.此时&#xff0c;勾选Archive存档&#xff0c;点击刷选&#xff0c;这样所有能安装的在线QT的版本都出来了。