Mybaties-puls 坑

1、Mybaties-puls提供的所用的批量操作方法,其实底层是通过for循环遍历操作的每一条数据,只是在数据传输上执行了一次io,减少io的次数,并没有减少操作数据库的次数。

2、mapper中手写sql ,注意:在批量操作之前判断数组不为空

2.1批量插入

sql 复制代码
 <insert id="insertBatch" parameterType="java.util.List">
        insert into user(
        user_id,
        user_name,
        create_time,
        update_time
        )
        values
        <foreach collection="list" item="item" index="index" separator=",">
            (
            #{item.UserId},
            #{item.UserName},
            now(),
            now()
            )
        </foreach>
    </insert>

2.2 根据id批量更新

sql 复制代码
    <update id="batchUpdate" parameterType="java.util.List">
        update mg_cps_goods_rate_config
        <trim prefix="set" suffixOverrides=",">
            <trim prefix="user_id =case" suffix="end,">
                <foreach collection="list" item="item" index="index">
                    <if test="item.UserId!=null">
                        when id=#{item.id} then #{item.UserId}
                    </if>
                    <if test="item.UserId == null">
                        when id=#{item.id} then user.user_id
                    </if>
                </foreach>
            </trim>

            <trim prefix="user_name =case" suffix="end,">
                <foreach collection="list" item="item" index="index">
                    <if test="item.UserName!=null">
                        when id=#{item.id} then #{item.UserName}
                    </if>
                    <if test="item.updateUserName == null">
                        when id=#{item.id} then user.user_name
                    </if>
                </foreach>
            </trim>
            <trim prefix="update_time =case" suffix="end,">
                <foreach collection="list" item="item" index="index">
                    <if test="item.updateTime!=null">
                        when id=#{item.id} then #{item.updateTime}
                    </if>
                    <if test="item.updateTime == null">
                        when id=#{item.id} then user.update_time
                    </if>
                </foreach>
            </trim>
        </trim>
        where mark = 1
        and id in
        <foreach collection="list" item="item" index="index" separator="," open="(" close=")">
            #{item.id,jdbcType=BIGINT}
        </foreach>
    </update>

2.3 in 多字段为调价时,用insql

java 复制代码
  List<String> list = new ArrayList();
        for (int i = 0; i < 5; i++) {
            Good good = new Good();
            good.setType(0);
            good.setShopId(i+10L);
            good.setSkuId((long) i);
            list.add("(" + good.getSkuId() + "," + good.getShopId() +")");
        }
        System.out.println("asList" + list);
        //字符串数组转字符串
        String join = StringUtils.join(list.toArray(), ",");
        System.out.println("strings1" + join);
        QueryWrapper<Good> queryWrapper = new QueryWrapper<>();
        // default Children inSql(R column, String inValue)
        queryWrapper.inSql("(sku_id,shop_id)",join);
        return this.list(queryWrapper);
相关推荐
亓才孓8 小时前
【Exception】CONDITIONS EVALUATION REPORT条件评估报告
java·开发语言·mybatis
树码小子16 小时前
图书管理系统(2)图书列表接口
spring boot·mybatis·图书管理系统
tuokuac16 小时前
MyBatis-Plus调用getEntity()触发异常
java·mybatis
亓才孓19 小时前
【SQLSyntaxErrorException】SQL语法错误
数据库·sql·mybatis
亓才孓19 小时前
【MyBatis Exception】SQLSyntaxErrorException(按批修改不加配置会报错)
java·开发语言·mybatis
亓才孓19 小时前
【MyBatis Runtime Exception】自动驼峰映射对Map不生效,应该在查询中起别名
java·windows·mybatis
亓才孓19 小时前
【MyBatis Plus】MyBatis Plus框架
mybatis
树码小子19 小时前
图书管理系统(3)修改图书接口
spring boot·mybatis·图书管理系统
亓才孓1 天前
【MyBatis Exception】Public Key Retrieval is not allowed
java·数据库·spring boot·mybatis
Hx_Ma162 天前
测试题(六)
java·tomcat·mybatis