一.批量插入
1.没有自增主键方式
2.自增主键方式
<!--批量插入数据 -->
<insert id="insertList" parameterType="java.util.List">
<selectKey resultType ="long" keyProperty= "id" order= "AFTER">
SELECT LAST_INSERT_ID()
</selectKey >
INSERT INTO lottery_issue (
`issue_num`,
`start_time`,
`end_time`,
`open_time`
)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.issueNum},
#{item.startTime},
#{item.endTime},
#{item.openTime}
)
</foreach>
</insert>
<!--selectKey:用于配置主键返回
keyProperty:要绑定的pojo属性
resultType:属性数据类型
order:指定什么时候执行,AFTER之后 ,BEFORE之前
-->
3.自增主键方式(mybatis版本 3.3.1之后),可以这样写
<!--批量插入数据 -->
<insert id="insertList" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id" >
INSERT INTO lottery_issue (
`issue_num`,
`start_time`,
`end_time`,
`open_time`
)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.issueNum},
#{item.startTime},
#{item.endTime},
#{item.openTime}
)
</foreach>
</insert>
useGeneratedKeys:属性
取值范围true|false 默认值是:false。 含义:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty(pojo类的id属性名)设置的领域模型属性中。
关于foreach属性解释
foreach元素的属性主要有 item,index,collection,open,separator,close。
index:指定一个名字,用于表示在迭代过程中,每次迭代到的位置
open:表示该语句以什么开始
close:表示以什么结束
separator:表示在每次进行迭代之间以什么符号作为分隔
item:表示集合中每一个元素进行迭代时的别名
collection属性主要有3种情况
1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map
二.批量删除
<delete id="batchDeleteUser" parameterType="list">
delete from t_user where id in
<foreach collection="list" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete>
三.批量更新
<update id="updateBatch" parameterType="list">
update course
<trim prefix="set" suffixOverrides=",">
<trim prefix="name =case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="i.name!=null">
when id=#{i.id} then #{i.name}
</if>
</foreach>
</trim>
<trim prefix=" roadgridid =case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="i.roadgridid!=null">
when id=#{i.id} then #{i.roadgridid}
</if>
</foreach>
</trim>
</trim>
<where>
<foreach collection="list" open='id in(' item="i" separator="," close=")">
#{i.id}
</foreach>
</where>
trim标签的使用
prefix:前缀
suffix:后缀
prefixOverrides:忽略第一个指定分隔符
suffixOverrides:忽略最后一个分隔符
UPDATE course
SET
name = CASE id
WHEN 1 THEN 'name1'
WHEN 2 THEN 'name2'
END,
title = CASE id
WHEN 1 THEN 'New Title 1'
WHEN 2 THEN 'New Title 2'
END
WHERE id IN (1,2,3)