【大型电商项目开发】商品服务之实体类对象Object&参数列表&修改功能-24

导读:本篇文章讲解 【大型电商项目开发】商品服务之实体类对象Object&参数列表&修改功能-24,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一:object划分

1.PO(persistant object) 持久对象

  • PO 就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO 中应该不包 含任何对数据库的操作。

2.DO(Domain Object)领域对象

  • 就是从现实世界中抽象出来的有形或无形的业务实体。

3.TO(Transfer Object) ,数据传输对象

  • 不同的应用程序之间传输的对象

4.DTO(Data Transfer Object)数据传输对象

  • 这个概念来源于 J2EE 的设计模式,原来的目的是为了 EJB 的分布式应用提供粗粒度的 数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这 里,泛指用于展示层与服务层之间的数据传输对象。

5.VO(value object) 值对象

  • 通常用于业务层之间的数据传递,和 PO 一样也是仅仅包含数据而已。但应是抽象出 的业务对象 , 可以和表对应 , 也可以不 , 这根据业务的需要 。用 new 关键字创建,由 GC 回收的。 View object:视图对象;
  • 接受页面传递来的数据,封装对象 将业务处理完成的对象,封装成页面要用的数据。
  • 将业务处理完的对象,封装成页面需要处理的对象。

6.BO(business object) 业务对象

  • 从业务模型的角度看 , 见 UML 元件领域模型中的领域对象。封装业务逻辑的 java 对 象 , 通过调用 DAO 方法 , 结合 PO,VO 进行业务操作。business object: 业务对象 主要作 用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。 比如一个简 历,有教育经历、工作经历、社会关系等等。 我们可以把教育经历对应一个 PO ,工作经 历对应一个 PO ,社会关系对应一个 PO 。 建立一个对应简历的 BO 对象处理简历,每 个 BO 包含这些 PO 。 这样处理业务逻辑时,我们就可以针对 BO 去处理。

7.POJO(plain ordinary java object) 简单无规则 java 对象

  • 传统意义的 java 对象。就是说在一些 Object/Relation Mapping 工具中,能够做到维护 数据库表记录的 persisent object 完全是一个符合 Java Bean 规范的纯 Java 对象,没有增 加别的属性和方法。我的理解就是最基本的 java Bean ,只有属性字段及 setter 和 getter 方法!。
  • POJO 是 DO/DTO/BO/VO 的统称。

8.DAO(data access object) 数据访问对象

  • 是一个 sun 的一个标准 j2ee 设计模式, 这个模式中有个接口就是 DAO ,它负持久 层的操作。为业务层提供接口。此对象用于访问数据库。通常和 PO 结合使用, DAO 中包 含了各种数据库的操作方法。通过它的方法 , 结合 PO 对数据库进行相关的操作。夹在业 务逻辑与数据库资源中间。配合 VO, 提供数据库的 CRUD 操作。

二:属性分组保存功能优化

1.新建vo对象

注:在gulimail-product的product包下新建vo对象,并且创建AttrVo对象
在这里插入图片描述

2.编辑AttrVo对象

package com.sysg.gulimail.product.vo;

import lombok.Data;

@Data
public class AttrVo {
    /**
     * 属性id
     */
    private Long attrId;
    /**
     * 属性名
     */
    private String attrName;
    /**
     * 是否需要检索[0-不需要,1-需要]
     */
    private Integer searchType;
    /**
     * 属性图标
     */
    private String icon;
    /**
     * 可选值列表[用逗号分隔]
     */
    private String valueSelect;
    /**
     * 属性类型[0-销售属性,1-基本属性,2-既是销售属性又是基本属性]
     */
    private Integer attrType;
    /**
     * 启用状态[0 - 禁用,1 - 启用]
     */
    private Long enable;
    /**
     * 所属分类
     */
    private Long catelogId;
    /**
     * 快速展示【是否展示在介绍上;0-否 1-是】,在sku中仍然可以调整
     */
    private Integer showDesc;
    /**
     * 属性分组id
     */
    private Long attrGroupId;
}

3.编辑AttrController的save保存方法

   /**
     * 保存
     */
    @RequestMapping("/save")
    //@RequiresPermissions("product:attr:save")
    public R save(@RequestBody AttrVo attr){
        attrService.saveAttr(attr);
        return R.ok();
    }

4.编辑AttrServiceImpl

package com.sysg.gulimail.product.service.impl;

import com.sysg.gulimail.product.dao.AttrAttrgroupRelationDao;
import com.sysg.gulimail.product.entity.AttrAttrgroupRelationEntity;
import com.sysg.gulimail.product.vo.AttrVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sysg.common.utils.PageUtils;
import com.sysg.common.utils.Query;

import com.sysg.gulimail.product.dao.AttrDao;
import com.sysg.gulimail.product.entity.AttrEntity;
import com.sysg.gulimail.product.service.AttrService;
import org.springframework.transaction.annotation.Transactional;


@Service("attrService")
public class AttrServiceImpl extends ServiceImpl<AttrDao, AttrEntity> implements AttrService {
    @Autowired
    private AttrAttrgroupRelationDao relationDao;
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<AttrEntity> page = this.page(
                new Query<AttrEntity>().getPage(params),
                new QueryWrapper<AttrEntity>()
        );

        return new PageUtils(page);
    }
    @Transactional
    @Override
    public void saveAttr(AttrVo attr) {
        AttrEntity attrEntity = new AttrEntity();
        BeanUtils.copyProperties(attr,attrEntity);
        //1.保存基本数据
        this.save(attrEntity);
        //2.保存关联关系
        AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
        //属性分组的id
        relationEntity.setAttrGroupId(attr.getAttrGroupId());
        //属性的id
        relationEntity.setAttrId(attrEntity.getAttrId());
        relationDao.insert(relationEntity);
    }
}

三:规格参数列表

1. 编辑AttrController的baseAttrList方法

 /**
     * 通过catelogId获取数据
     * @return
     * @RequestParam Map<String, Object> params 表示分页参数
     */
    @RequestMapping(value = "/base/list/{catelogId}",method = RequestMethod.GET)
    public R baseAttrList(@RequestParam Map<String, Object> params,@PathVariable("catelogId") Long catelogId){
        PageUtils page = attrService.querBaseAttrPage(params,catelogId);
        return R.ok().put("page", page);
    }

2.编辑AttrServiceImpl的querBaseAttrPage方法

 @Override
    public PageUtils querBaseAttrPage(Map<String, Object> params, Long catelogId) {
        QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<>();
        //当catelogId等于0时,默认查询所有数据
        if(catelogId != 0){
            queryWrapper.eq("catelog_id",catelogId);
        }
        //获取模糊查询参数
        String key = (String) params.get("key");
        if(StringUtils.isNotEmpty(key)){
            queryWrapper.and((wrapper)->{
                wrapper.eq("attr_id",key).or().like("attr_name",key);
            });
        }
        IPage<AttrEntity> page = this.page(new Query<AttrEntity>().getPage(params),queryWrapper);
        PageUtils pageUtils = new PageUtils(page);
        //将获取到的page数据提取出来
        List<AttrEntity> records = page.getRecords();
        List<AttrRespVo> respVos = records.stream().map((attrEntity) -> {
            AttrRespVo attrRespVo = new AttrRespVo();
            //将遍历的数据,全部放到attrRespVo对象中
            BeanUtils.copyProperties(attrEntity, attrRespVo);
            //1.设置分组名称
            AttrAttrgroupRelationEntity attr =
                    relationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrEntity.getAttrId()));
            if (attr != null) {
                AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attr.getAttrGroupId());
                attrRespVo.setGroupName(attrGroupEntity.getAttrGroupName());
            }
            //2.设置分类名称
            CategoryEntity categoryEntity = categoryDao.selectById(attrEntity.getCatelogId());
            if (categoryEntity != null) {
                attrRespVo.setCatelogName(categoryEntity.getName());
            }
            return attrRespVo;
        }).collect(Collectors.toList());
        pageUtils.setList(respVos);
        return pageUtils;
    }

1):BeanUtils.copyProperties(attrEntity, attrRespVo);

  • 将attrEntity的属性值全部赋值给attrRespVo对象
  • BeanUtils.copyProperties是string封装的工具类

2)records.stream().map().collect()

  • 表示java的流式写法
  • map可以将遍历的值封装到对象里面
  • collect可以将返回的对象收集起来并且返回

四:规格参数修改功能

我们需要点击修改的时候,回显所属分类和所属分组
在这里插入图片描述

1.在AttrRespVo添加三级分类全路径

作用:点击编辑的时候将catelogPath带回去,用于回显三级分类

package com.sysg.gulimail.product.vo;
import lombok.Data;
@Data
public class AttrRespVo extends AttrVo {
    /**
     * 分类名称
     */
    private String catelogName;
    /**
     * 分组名称
     */
    private String groupName;
    /**
     * 三级分类全路径
     */
    private Long[]  catelogPath;
}

2.编辑AttrController的info方法

    /**
     * 信息
     */
    @RequestMapping("/info/{attrId}")
    //@RequiresPermissions("product:attr:info")
    public R info(@PathVariable("attrId") Long attrId){
        AttrRespVo attrRespVo = attrService.getAttrInfo(attrId);
        return R.ok().put("attr", attrRespVo);
    }

3.编辑AttrServiceImpl的getAttrInfo方法

  @Override
    public AttrRespVo getAttrInfo(Long attrId) {
        AttrRespVo attrRespVo = new AttrRespVo();
        //查询当前属性的详细信息
        AttrEntity attrEntity = this.getById(attrId);
        BeanUtils.copyProperties(attrEntity,attrRespVo);
        //获取分组id并且封装attrRespVo
        AttrAttrgroupRelationEntity attrAttrgroupRelationEntity = relationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrId));
        if( attrAttrgroupRelationEntity != null){
            attrRespVo.setAttrGroupId(attrAttrgroupRelationEntity.getAttrGroupId());
            AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrAttrgroupRelationEntity.getAttrGroupId());
            if( attrGroupEntity != null ){
                attrRespVo.setGroupName(attrGroupEntity.getAttrGroupName());
            }
        }
        //获取三级分类完整路径并且封装attrRespVo
        Long catelogId = attrEntity.getCatelogId();
        Long[] categlogPath = categoryService.findCateglogPath(catelogId);
        if( categlogPath != null || categlogPath.length > 0){
            attrRespVo.setCatelogPath(categlogPath);
        }
        CategoryEntity categoryEntity = categoryDao.selectById(catelogId);
        if( categoryEntity != null ){
            attrRespVo.setCatelogName(categoryEntity.getName());
        }

        return attrRespVo;
    }

在这里插入图片描述

4.修改AttrController的update方法

当修改页面我们成功回显分类和分组后,点击保存发现数据并没有更新到列表

   /**
     * 修改
     */
    @RequestMapping("/update")
    //@RequiresPermissions("product:attr:update")
    public R update(@RequestBody AttrVo attr){
		attrService.updateAttr(attr);
        return R.ok();
    }

5.编辑AttrServiceImpl的updateAttr方法

  @Transactional
    @Override
    public void updateAttr(AttrVo attr) {
        AttrEntity attrEntity = new AttrEntity();
        BeanUtils.copyProperties(attr,attrEntity);
        //1.修改基本数据
        this.updateById(attrEntity);
        AttrAttrgroupRelationEntity attrAttrgroupRelationEntity = new AttrAttrgroupRelationEntity();
        attrAttrgroupRelationEntity.setAttrGroupId(attr.getAttrGroupId());
        attrAttrgroupRelationEntity.setAttrId(attr.getAttrId());
        Integer count = relationDao.selectCount(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attr.getAttrId()));
        //2.修改分组关联
        if( count > 0){
            //编辑保存
            relationDao.update(attrAttrgroupRelationEntity,new UpdateWrapper<AttrAttrgroupRelationEntity>().eq("attr_id",attr.getAttrId()));
        } else {
            //新增保存
            relationDao.insert(attrAttrgroupRelationEntity);
        }
    }

此时列表和编辑功能就好了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84125.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!