mybatis 动态sql 语法示例

批量更新

<update id="updateBatch" parameterType="java.util.List">
    update t_item_priority
    <trim prefix="set" suffixOverrides=",">
        <trim prefix="item_random_score = case" suffix="end,">
            <foreach collection="list" item="item" index="index">
                    when id=#{item.id} then #{item.item_random_score}
            </foreach>
        </trim>

        <trim prefix="update_time = case" suffix="end,">
            <foreach collection="list" item="item" index="index">
                when id=#{item.id} then #{item.update_time}
            </foreach>
        </trim>

    </trim>
    where id in
    <foreach collection="list" index="index" item="item" separator="," open="(" close=")">
        #{item.id}
    </foreach>
</update>

该SQL批量更新了表t_item_priority中满足id需求的数据记录的两个字段item_random_scoreupdate_time。以下是一个对应的SQL语句

UPDATE t_item_priority
SET item_random_score = CASE
WHEN id = $id1 THEN
    $item_random_score1
WHEN id = $id2 THEN
    $item_random_score1
END,
 update_time = CASE
WHEN id = $id1 THEN
    $update_time1
WHEN id = $id2 THEN
    $update_time2
END
WHERE
    id IN ($id1, $id2)

mybatis调用代码示例片段:

List<Map<String,Object>> list = new ArrayList<>();

Random random = new Random();
Date now = new Date();
for (int i = 1; i <5 ; i++) {
    Map<String,Object> map = new HashMap<>();
    map.put("id",i);
    map.put("item_random_score",random.nextFloat());
    map.put("update_time",now);
    list.add(map);
}
sqlSession.update($sqlId, list);

foreach 实现in集合

只有一个数组或集合参数

批量删除多个用户,in查询

<delete id="deleteUsers"  parameterType="list" >
    DELETE FROM user WHERE 1 = 1
    <if test="list != null and list.size()>0">
        AND id IN
        <foreach collection="list" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </if>
</delete>

mybatis调用代码示例片段:

 List<String> ids = new ArrayList<>();
 ids.add("4");
 ids.add("5");
 int delete = sqlSession.delete($sqlId, ids);

当调用方使用数组参数时,foreach 标签的collection属性设置为array即可

猜你喜欢

转载自blog.csdn.net/gs_albb/article/details/80173184