放心白魔不会有接力棒的现象 http://www.zgbdf.net/baidianfeng/linchuangbiaoxian/46282.shtml
一、在工作的过程中,有涉及批量导入数据的需求,实现主要有以下方式
读取一条数据,查询数据库,不存在则保存,存在则更新,耗时,适用保存少量数据。
查询已存在的全部数据与保存的数据比较,包含则更新,不包含则保存,减少查询次数,适用保存少量数据。
直接利用数据库语句判断保存数据,存在则忽略或更新,不存在则保存。
二、mysql保存方式
menu表
CREATETABLE`menu`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`name`varchar(40)DEFAULTNULL,`url`varchar(20)DEFAULTNULL,`parent_id`bigint(20)DEFAULTNULL,`index`int(11)DEFAULTNULL,`create_time`datetimeDEFAULTNULL,PRIMARYKEY(`id`),UNIQUEKEY`menu_url`(`url`)USINGBTREE)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;
2.1insertignoreinto
当插入数据时,出现错误,主键或存在唯一约束字段数据相等,将忽略不再保存数据。
例子:
insertignoreintomenu(name,url,parent_id,`index`,create_time)VALUES("用户","user/list",NULL,1,"-04-:10:57");
2.2replaceinto
当插入数据时,出现主键或存在唯一约束字段数据相等,则先删除数据,再保存数据,对于存在自增主键的,其它表中有关联,则影响较大,此方法一般不建议使用。
例子:
replaceintomenu(name,url,parent_id,`index`,create_time)VALUES("用户","user/list",NULL,1,"-04-:10:57");
2.3insertintoselectnotexists
当插入数据时,先判断数据是否存在,不存在则插入数据库。
例子:
insertintomenu(name,url,parent_id,`index`,create_time)select"用户","user/list",NULL,1,"-04-:10:57"fromDUALwherenotexists(selecturlfrommenuwhereurl="user/list")
2.4onduplicatekeyupdate
当存在唯一约束(key或unique),可以使用此方式,当插入数据时,先判断数据是否存在,不存在则插入数据库,存在则更新数据。
例子:
url唯一
INSERTINTOmenu(name,url,parent_id,`index`,create_time)VALUES("用户","user/list",NULL,1,"-04-:10:57")ONDUPLICATEKEYUPDATEname=VALUES(name),parent_id=VALUES(parent_id),`index`=VALUES(`index`)
三、springboot2.3.2+JPA
实体类
packagedemo.springboot.domain;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.Id;importjavax.persistence.Table;import