使用场景:config 表中增加相关配置信息,如果存在则更新,如果不存在则新增。在 MySQL 中也可以实现这样的操作。即 ON DUPLICATE KEY UPDATE。
ON DUPLICATE KEY UPDATE 依赖于主键或唯一索引。
示例
如下 SQL 语句(假定字段[config_key] unique index):
1
|
INSERT INTO (config_key, config_value) VALUES ('phone', '123456789') ON DUPLICATE KEY UPDATE config_value=values(config_value);
|
若 phone 不存在等价于:
1
|
INSERT INTO (config_key, config_value) VALUES ('phone', '123456789') ;
|
若 phone 存在等价于:
1
|
UPDATE config SET config_value = '123456789' WHERE config_key = 'phone';
|
代码示例
引入依赖:
1 2 3 4 5
|
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.16</version> </dependency>
|
Config 表结构:
1 2 3 4 5 6 7 8
|
CREATE TABLE `config` ( `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', `config_key` varchar(32) DEFAULT NULL COMMENT '键', `config_value` varchar(32) DEFAULT NULL COMMENT '值', `descr` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key_name` (`config_key`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
|
Config.java:
1 2 3 4 5 6 7 8
|
@Setter public class Config { private Integer id; private String configKey; private String configValue; private String descr; }
|
ConfigDao.java:
1 2 3 4 5 6 7 8 9 10 11
|
void addList(@Param("configList") List<Config> configList);
void add(Config config);
|
ConfigDao.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.guavacash.dao.ConfigDao">
<insert id="addList" parameterType="java.util.List"> insert into (config_key, config_value, descr) values <foreach collection="configList" item="item" index="index" separator=","> ( #{item.configKey}, #{item.configValue}, #{item.descr} ) </foreach> ON DUPLICATE KEY UPDATE config_value = values(config_value) </insert>
<insert id="add" parameterType="com.guavacash.bean.Config"> insert into (config_key, config_value, descr) values ( #{configKey}, #{configValue}, #{descr} ) ON DUPLICATE KEY UPDATE config_value = values(config_value) </insert>
</mapper>
|
近期评论