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 小时前
基于SpringBoot的公务员考试管理系统【题库组卷+考试练习】
java·vue.js·spring boot·后端·java-ee·intellij-idea·mybatis
刘一说1 天前
深入解析 Spring Boot 数据访问:Spring Data JPA 与 MyBatis 集成实战
spring boot·tomcat·mybatis
赋能大师兄1 天前
MyBatis缓存机制
mybatis·二级缓存·一级缓存
codingPower2 天前
升级mybatis-plus导致项目启动报错: net.sf.jsqlparser.statement.select.SelectBody
java·spring boot·maven·mybatis
123461613 天前
互联网大厂Java面试:从Spring Boot到微服务的探索
java·数据库·spring boot·微服务·面试·mybatis·orm
2301_801252223 天前
Mybatis的添加和修改功能
java·开发语言·mybatis
W.Buffer5 天前
MyBatis 源码深度解析:从 Spring Boot 实战到底层原理
spring boot·后端·mybatis
CS Beginner5 天前
【搭建】个人博客网站的搭建
java·前端·学习·servlet·log4j·mybatis
m0_564264186 天前
IDEA DEBUG调试时如何获取 MyBatis-Plus 动态拼接的 SQL?
java·数据库·spring boot·sql·mybatis·debug·mybatis-plus
没有bug.的程序员6 天前
Spring Boot 整合第三方组件:Redis、MyBatis、Kafka 实战
java·spring boot·redis·后端·spring·bean·mybatis