<insert id="insertTrafficPoliceInfoList" parameterType="java.util.List">
replace into d_traffic_police_info
(task_id,alarm_time)
values
<foreach collection="list" item="item" index="index" separator=",">
( #{item.taskId, jdbcType=VARCHAR },
#{item.alarmTime,jdbcType=TIMESTAMP } )
</foreach>
</insert>
1、为何用replace替换insert?
当主键相同时,用replace可以更新相同主键的数据,如果用insert则会报错
详见mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法
2、<foreach>标签
属性:
collections | 必选 该属性指定你要遍历的集合类型, List默认的名称为“list”、数组(Array)的默认名称为“array”。 |
item | 必选,表示本次迭代获取的元素 |
open | 可选,表示该语句以什么开始,最常用的是左括弧’(’, |
close | 可选,表示该语句以什么结束,最常用的是右括弧’)’, |
separator | 可选,mybatis会在每次迭代后给sql语句append上separator属性指定的字符 |
index | 可选,在list、Set和数组中,index表示当前迭代的位置,在map中,index代指是元素的key |
3、<trim>标签
属性 描述
prefix 给sql语句拼接的前缀
suffix 给sql语句拼接的后缀
prefixOverrides 去除sql语句前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签将会去除该"AND"
suffixOverrides 去除sql语句后面的关键字或者字符,该关键字或者字符由suffixOverrides属性指定
4、jdbcType
指定jdbcType可以在对象的某个属性值为空时,sql不报错