【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【08】【商品服务】Object划分_批量删除


持续学习&持续更新中...

守破离


【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【08】【商品服务】Object划分_批量删除

Object划分


  • 数据库中对于一张表的数据,由于拥有隐私字段、多余字段、字段过少等原因,不应该直接传递给客户端让客户端直接使用。
  • 并且要知道数据的传输是要经过网络通信的,考虑到数据大小对于用户流量、系统并发量/吞吐量等的影响,我们也不应该给客户传递冗余或者缺失的JSON数据。
  • 还有很多原因
    • 比如我们的一个业务所需要的信息有时候其实并不是仅由一张表就能覆盖的
    • 比如数据库中的字段信息其实并不适合展示给用户看,需要做处理
    • 前端发过来的数据,使用一个简单的数据库对象也并不一定能处理好
    • ...
  • 综上,我们肯定要对从数据库中查询出来的表数据进行一些加工处理、业务逻辑处理之后再传递给上一层,直到客户端,而不是简单的一张表对应一个Model对象。

批量删除/添加

一句一句删除的话,会发送很多个请求给MySQL服务器,会对MySQL造成较大的性能影响,也会占用资源和带宽,所以使用批量删除

java 复制代码
    //TODO 写博客:批量删除
    @PostMapping("/attr/relation/delete")
    public R batchDeleteRelation(@RequestBody List<AttrAttrGroupRelationVo> relationVos) {
        relationService.batchDeleteRelation(relationVos);
        return R.ok();
    }
java 复制代码
    @Transactional
    @Override
    public void batchDeleteRelation(List<AttrAttrGroupRelationVo> relationVos) {
        this.baseMapper.batchDeleteRelation(relationVos);
    }
java 复制代码
@Mapper
public interface AttrAttrgroupRelationDao extends BaseMapper<AttrAttrgroupRelationEntity> {

    /*
    一句一句删除的话,会发送很多个请求给MySQL服务器,会对MySQL造成较大的性能影响,也会占用资源和带宽,所以使用批量删除

    批量删除语句:
    DELETE FROM pms_attr_attrgroup_relation
    WHERE
    ('attr_id' = 1 AND 'attr_group_id' = 1)
    OR
    ('attr_id' = 3 AND 'attr_group_id' = 2)
    OR ...
     */

    void batchDeleteRelation(@Param("relations") List<AttrAttrGroupRelationVo> relationVos);

}
java 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.atguigu.gulimall.product.dao.AttrAttrgroupRelationDao">

    <!-- 可根据自己的需求,是否要使用 -->
    <resultMap type="com.atguigu.gulimall.product.entity.AttrAttrgroupRelationEntity" id="attrAttrgroupRelationMap">
        <result property="id" column="id"/>
        <result property="attrId" column="attr_id"/>
        <result property="attrGroupId" column="attr_group_id"/>
        <result property="attrSort" column="attr_sort"/>
    </resultMap>

    <delete id="batchDeleteRelation">
        DELETE FROM `pms_attr_attrgroup_relation` WHERE
        <foreach collection="relations" item="item" separator=" OR ">
            (attr_id=#{item.attrId} AND attr_group_id=#{item.attrGroupId})
        </foreach>
    </delete>

</mapper>

批量添加:

xml 复制代码
    <insert id="batchAddRelation">
        INSERT INTO  `pms_attr_attrgroup_relation`(attr_id, attr_group_id) VALUES
        <foreach collection="relations" item="item" separator=",">
            (#{item.attrId} , #{item.attrGroupId})
        </foreach>
    </insert>

or

java 复制代码
    @Transactional
    @Override
    public void batchAddRelation(List<AttrAttrGroupRelationVo> relationVos) {
//        使用自己写的批量添加也可以
//        this.baseMapper.batchAddRelation(relationVos);

        List<AttrAttrgroupRelationEntity> collect = relationVos.stream().map(relation -> {
            AttrAttrgroupRelationEntity attrAttrgroupRelationEntity = new AttrAttrgroupRelationEntity();
//            attrAttrgroupRelationEntity.setAttrId(relation.getAttrId());
//            attrAttrgroupRelationEntity.setAttrGroupId(relation.getAttrGroupId());
            BeanUtils.copyProperties(relation, attrAttrgroupRelationEntity);
            return attrAttrgroupRelationEntity;
        }).collect(Collectors.toList());
        this.saveBatch(collect);
    }

参考

雷丰阳: Java项目《谷粒商城》Java架构师 | 微服务 | 大型电商项目.


本文完,感谢您的关注支持!


相关推荐
程序员黑豆19 分钟前
Java中的字符串【AI全栈开发】
java
namexingyun36 分钟前
开源前端生态如何成为 AI UI 生成的“燃料“:shadcn/ui、Tailwind CSS、Storybook 技术价值全解剖
java·前端·人工智能·python·ui·开源·ai编程
终将老去的穷苦程序员1 小时前
基于SpringBoot的餐饮管理系统
java·spring boot·后端
心之伊始1 小时前
Spring AI Tool Calling 实战:让 Java Agent 调用本地 Bean 工具方法
java·spring boot·agent·spring ai·tool calling
北顾笙9801 小时前
MYSQL-day03
数据库·sql·mysql
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第110题】【并发篇】第10题:CAS 存在哪些问题?
java·开发语言·面试
瀚高PG实验室1 小时前
java中间件无法连接数据库
java·数据库·中间件·瀚高数据库
ULIi096kr1 小时前
MySQL大表优化终极方案:单表数据量上限、卡顿解决、分表分库实战教程
数据库·mysql
东南门吹雪1 小时前
JAVA TCP socket编程框架
java·高并发·socket·tcp·nio
xingyuzhisuan1 小时前
缓存命中率提升方案:从 30% 优化至 82% 全流程优化记录
java·开发语言·缓存·ai