Mybatis--动态SQL

foreach标签
批量添加数据场景

<select id="insertBatchAddTaskRun">
    insert into tb_ucpaas_task_run_${taskId} ( task_id, nbr, `status`, create_time )
    values
    <foreach collection="lstNbr" item="item" index="index" separator="," close=";">
      (
      #{taskId}, #{item}, #{status}, now()
      )
    </foreach>
  </select>

Dao:

void insertBatchAddTaskRun(@Param("taskId") Integer taskId, @Param("lstNbr") List<String> lstNbr, @Param("status") String status);

SQL原型:

INSERT INTO user(name)
VALUES("张三"),
("张三");
insert into tb_task_nbr_var
        <trim prefix="(" suffix=")" suffixOverrides=",">
            appId,
            taskId,
            nbr,
            var1,
            var2,
            var3,
            var4,
            var5,
            var6,
            var7,
            var8,
            var9,
            var10,
            create_time,
            sid,
        </trim>
        <foreach collection="lstTbTaskNbrVars" item="item" open="VALUES" separator="," close=";">
            <trim prefix="(" suffix=")" suffixOverrides=",">
                #{item.appid,jdbcType=VARCHAR},
                #{item.taskid,jdbcType=INTEGER},
                #{item.nbr,jdbcType=VARCHAR},
                #{item.var1,jdbcType=CHAR},
                #{item.var2,jdbcType=CHAR},
                #{item.var3,jdbcType=CHAR},
                #{item.var4,jdbcType=CHAR},
                #{item.var5,jdbcType=CHAR},
                #{item.var6,jdbcType=CHAR},
                #{item.var7,jdbcType=CHAR},
                #{item.var8,jdbcType=CHAR},
                #{item.var9,jdbcType=CHAR},
                #{item.var10,jdbcType=CHAR},
                #{item.createTime,jdbcType=DATE},
                #{item.sid,jdbcType=VARCHAR},
            </trim>
        </foreach>

Dao:

/**
     * 批量添加
     * @param lstTbTaskNbrVars
     * @return
     */
    Integer batchInsertSelect(@Param("lstTbTaskNbrVars") List<TbTaskNbrVar> lstTbTaskNbrVars);
<select id="selectTaskNbrVarCountBySidAndNbrs" resultType="java.lang.Integer">
        SELECT
        COUNT(*)
        FROM tb_task_nbr_var
        WHERE 1=1
        AND sid = #{sid}
        AND nbr IN
        <foreach item="nbr" collection="nbrs"
                 open="(" separator="," close=")">
            #{nbr}
        </foreach>
    </select>

Dao

/**
     * 根据sid和号码查询记录数
     * @param sid
     * @param lstNbrs
     * @return
     */
    Integer selectTaskNbrVarCountBySidAndNbrs(@Param("sid") String sid, @Param("nbrs") List<String> lstNbrs);

批量更新

<update id="batchUpdateTaskNbrVarBySidAndNbr" parameterType="java.util.List">
        <foreach collection="list" item="item" separator=";">
            UPDATE tb_task_nbr_var
            SET appId=#{item.appid},taskId=#{item.taskid}
            WHERE 1=1
            AND sid=#{item.sid}
            AND nbr=#{item.nbr}
        </foreach>
    </update>

Dao:

Integer batchUpdateTaskNbrVarBySidAndNbr(List<TbTaskNbrVar> lstTbTaskNbrVarList);

在if标签中使用枚举及外部静态方法,测试案例如下

  <select id="testEnum" resultType="com.ltq.model.User">
    SELECT *
    FROM user
    WHERE 1=1
    <if test="@java.util.Objects@equals(id,@com.test.mapper.UserIdEnum@USER_01.getId)">
        AND id=#{id}
    </if>
  </select>

枚举类

public enum UserIdEnum {
    /**
     * 测试枚举
     */
    USER_01(1,"测试");

    private Integer id;

    private String desc;

    UserIdEnum(Integer id, String desc) {
        this.id = id;
        this.desc = desc;
    }

    public Integer getId() {
        return id;
    }

    public String getDesc() {
        return desc;
    }
}

枚举只能定义在外部,在类中定义的话启动会报错。
参考https://blog.csdn.net/u010002184/article/details/86490787

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值