业务要求
批量插入时间价格表,如果某个套餐的某天的价格存在,则更新,不存在则插入
实现思路
oracle 9i及其以后版本支持的merge into语句,用于实现insertOrUpdate的功能mybatis的动态SQL语法foreach循环插入,待插入的实体bean的List通过查询数据库dual形成表,通过foreach的separator属性设置每次循环的隔离词为union连接每次形成的表为一个总表- 总表于条件匹配,符合条件update,不符合insert
- 更新的数据来源于
java.util.List中的实体的属性
缺陷
采用union 拼接sql,导致问题sql过长,耗时,性能不好,且达到一定量会超出sql长度限制,不推荐;
一般20字段以内的表新增,数据2000条以内可用,经过测试。
注意 union all会把所有结果集拼接在一起,union也会拼接所有结果,但会去除重复
mapper配置实现
1 | <insert id="merge" parameterType="java.util.List"> |