摘要
在更新大量数据时如果每条更新执行一次sql性能很低,也容易造成阻塞;批量更新时又有可能遇到主键重复的问题
在更新大量数据时可能同时遇到两个问题:
1、如果每条更新执行一次sql性能很低,也容易造成阻塞;
2、批量更新时又有可能遇到主键重复的问题
3、jdbc.url=jdbc:mysql://ip/库名?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true
使用 ON DUPLICATE KEY UPDATE 一条sql解决批量更新和主键重复问题(id为主键)
<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true">
INSERT INTO t_cloud_vcard (account_id,BEGIN,END,NAME,PROFILE,SOURCE,FN,N,NICKNAME,PHOTO,BDAY,ADR,LABEL,TEL,EMAIL,MAILER,TZ,GEO,TITLE,ROLE,LOGO, AGENT,ORG,CATEGORIES,NOTE,PRODID,REV,SORT_STRING,SOUND,UID,URL,VERSION,CLASS,XTENDED,IMPP,create_time) VALUES <foreach collection="list" item="item" index="index" separator=","> (#{item.accountId},#{item.BEGIN},#{item.END},#{item.NAME},#{item.PROFILE},#{item.SOURCE},#{item.FN},#{item.N},#{item.NICKNAME}, #{item.PHOTO},#{item.BDAY},#{item.ADR},#{item.LABEL},#{item.TEL},#{item.EMAIL}, #{item.MAILER},#{item.TZ},#{item.GEO},#{item.TITLE},#{item.ROLE},#{item.LOGO},#{item.AGENT},#{item.ORG},#{item.CATEGORIES},#{item.NOTE}, #{item.PRODID},#{item.REV},#{item.SORT_STRING},#{item.SOUND}, #{item.UID},#{item.URL},#{item.VERSION},#{item.CLASS},#{item.XTENDED},#{item.IMPP},now()) </foreach> ON DUPLICATE KEY UPDATE TEL=VALUES(TEL),EMAIL=VALUES(EMAIL),XTENDED=VALUES(XTENDED),PHOTO=VALUES(PHOTO)
</insert>