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);
相关推荐
大漠孤烟s2 天前
4.Mybatis学习-动态sql、缓存、逆向工程
mybatis
毕业设计7033 天前
(免费领源码) SpringBoot 游戏交易平台17600-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·spring boot·mysql·决策树·mybatis·idea·推荐算法
程序员JerrySUN4 天前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
linmengmeng_13144 天前
【总结】MyBatis-Plus批量插入与清表的正确姿势
java·spring boot·mysql·mybatis
vx_BS813304 天前
【项目编号:project51381】Spring Boot 婚纱摄影管理系统:套餐预约、在线咨询、支付与客片展示的一站式业务实现
java·spring boot·eclipse·tomcat·mybatis
jaysee-sjc5 天前
【苍穹外卖】Day01:从零认识企业级项目开发
java·开发语言·数据库·mysql·spring·intellij-idea·mybatis
程序猿乐锅5 天前
【黑马点评 | 第二篇】Redis 缓存更新策略与商铺缓存实现
java·网络·redis·spring·mybatis
萧瑟余晖5 天前
MyBatis 核心原理详解
架构·mybatis
MZA6665 天前
实战:基于 XXL-JOB + 策略模式 + Nacos 配置化的 CSV 导出任务系统设计
java·spring boot·mybatis
干到60岁退休的码农8 天前
15.创建获取用户接口与JWT认证器
java·spring boot·mybatis