首页 > 其他分享 >自定义Vo

自定义Vo

时间:2023-04-11 23:32:51浏览次数:38  
标签:attr 自定义 relationEntity Long public respVo Vo id

V0(value object)值对象

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

//ConTroller 控制层只接收 处理请求 校验数据 //service 接受controller 传来数据业务处理 //ConTroller接收 service 处理完数据 封装成页面 指定的Vo

//1.创建AttrVo 
@Data//自动生成get set 方法
public class AttrVo {
    //将attr中所有属性复制过来
/**
 * 并加入新的分组id
 */
private Long attrGroupId;

//2.AttrController
//AttrEntity 改成AttrVo 多接收一个attrGroupId 属性分组id
@RequestMapping("/save")
  public R save(@RequestBody AttrVo attr){
attrService.saveAttr(attr);
      return R.ok();
  }
//3.AttrService
void saveAttr(AttrVo attr);

//4.impl
@Transactional
@Override //attr页面来的数值
public void saveAttr(AttrVo attr) {
    //1.先保存基本信息 在保存其他信息 先存AttrEntity
    AttrEntity attrEntity = new AttrEntity();
    //用springBeanUtils.copyProperties 复制属性 第一个是属性的来源 第二个是复制到哪
    //将页码的来的数值attr 复制到attrao中
    BeanUtils.copyProperties(attr,attrEntity);
    this.save(attrEntity);
    //2.保存关联关系 是关联系 pms_attr_attrgroup_relation 注入dao
    AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
    //关系表使劲儿中属性分组id是attr获取id
    relationEntity.setAttrGroupId(attr.getAttrGroupId());
    //同 属性 id 是实体attrid
    relationEntity.setAttrId(attrEntity.getAttrId());
    relationDao.insert(relationEntity);
}
  • 【 规格参数 baseattr】在返回数据时候 需要显示catelogName 和groupName 定义:AttrRespVo 在查询一遍 分组 和分页信息 封装返回
@Data // 响应数据 基本包含 attr 直接继承AttrVo即可
public class AttrRespVo extends AttrVo {
    private String catelogName; //分类名字
    private String groupName; //分组名字
}

// 显示某一条信息
  @RequestMapping("/info/{attrId}")
  public R info(@PathVariable("attrId") Long attrId){
//AttrEntity attr = attrService.getById(attrId);
      AttrRespVo respVo = attrService.getAttrInfo(attrId);
      return R.ok().put("attr", respVo);
  }
  @Override
public AttrRespVo getAttrInfo(Long attrId) {
    //根据返回要字段要求 返回respVo
    AttrRespVo respVo = new AttrRespVo();
    //先查详细信息
    AttrEntity attrEntity = this.getById(attrId);
    BeanUtils.copyProperties(attrEntity,respVo);
    //放置分类id、和完整路径
    // 分组信息 respVo.setAttrGroupId(); 调用分组信息 查询selectOne一条数据,
    // 根据返回分组信息 关系表查询 attr_id 等于发过来请求的attrId 返回这一条数据attrAttrgroup
    AttrAttrgroupRelationEntity attrgroupRelation 
    = relationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrId));
    if (attrgroupRelation!=null){
        respVo.setAttrGroupId(attrgroupRelation.getAttrGroupId());
        AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrgroupRelation.getAttrGroupId());
        if (attrGroupEntity!=null){
            respVo.setGroupName(attrGroupEntity.getAttrGroupName());
        }
    }
    //respVo.setCatelogPath(); 查询分类的路径
    Long catelogId = attrEntity.getCatelogId();
    //调用之前service 传入catelogId
    Long[] catelogPath = categoryService.findCatelogPath(catelogId);
    respVo.setCatelogPath(catelogPath);
    CategoryEntity categoryEntity = categoryDao.selectById(catelogId);
    if (categoryEntity!=null){
        respVo.setCatelogName(categoryEntity.getName());
    }
    return respVo;
}

【 规格参数 baseattr】修改记录Attr

@Transactional
@Override
public void updateAttr(AttrVo attr) {
    AttrEntity attrEntity = new AttrEntity();
    //复制 接收页面的attr 放到attrEntity
    BeanUtils.copyProperties(attr,attrEntity);
    //修改基本属性
    this.updateById(attrEntity);
    //修改分组关联 不是按照id 修改 是按照attr_id 修改的
    AttrAttrgroupRelationEntity relationEntity
     = new AttrAttrgroupRelationEntity();
    //更新属性分组id
    relationEntity.setAttrGroupId(attr.getAttrGroupId());
    //更新 属性id
    relationEntity.setAttrId(attr.getAttrId());
    //查询记录数 如果大于0 则是修改 否则新增
    Integer count = relationDao.selectCount(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attr.getAttrId()));
    if (count>0){
        //更新 :依据 attr_id 更新关联关系表
        relationDao.update(relationEntity, new UpdateWrapper<AttrAttrgroupRelationEntity>().eq("attr_id",attr.getAttrId()));
    }else {
        relationDao.insert(relationEntity);
    }
}
  • 【 销售属性saleattr】新增Attr和规格属性几乎差不多,
//product/attr/sale/list/{catelogId} 基本属性和销售属性基本一致 一个当两个用
@GetMapping("/{attrType}/list/{catelogId}")
public R baseAttrList(@RequestParam Map<String, Object> params,
                      @PathVariable("catelogId") Long catelogId,
                      @PathVariable("attrType") String type){
    PageUtils page =attrService.queryBaseAttrPage(params,catelogId,type); //定义分页查询传入 分页条件params 和catelogId 一起返回给PageUtils page
    return R.ok().put("page", page);//return 出去page信息
}

获取指定分组关联的所有属性相应数据

image.png

//controller层
@GetMapping("{attrgroupId}/attr/relation")
public R attrReleation(@PathVariable("attrgroupId") Long attrgroupId){
//调用getRelationAttr传入attrgroupId 需要返回一个List里面是AttrEntity 的数据即List<AttrEntity>
    List<AttrEntity> entities = attrService.getRelationAttr(attrgroupId);
    //返回改数据data数组里面是entities
    return R.ok().put("data",entities);
}
[]是数组形b形式,{}是对象形式,都du可以包含其他类型.

@Override //根据attrgroupId查找关联的所有基本属性
public List<AttrEntity> getRelationAttr(Long attrgroupId) {
    //先去关联 关系表查找attrgroupId 对应的attrid
    // 这是查询的是 所有attrgroupId相关的,用selectList
    List<AttrAttrgroupRelationEntity> entities 
    = relationDao.selectList(new QueryWrapper<AttrAttrgroupRelationEntity>()
    .eq("attr_group_id", attrgroupId));
    //收集属性id 返回一个Long 类型的attr集合
    List<Long> attrIds = entities.stream().map((hahaha) -> {
        return hahaha.getAttrId();
    }).collect(Collectors.toList());

    //2.查出当前所以属性 通过属性的ids集合
    Collection<AttrEntity> attrEntities = this.listByIds(attrIds);
    //返回 并转换
    return (List<AttrEntity>) attrEntities;

根据 非id 两个字段删除

@Data
public class AttrGroupRelationVo {
    //定义vo 接收传入两个非主键 字段
    private  Long attrId;
    private  Long attrGroupId;
}

//接受的是一个对象 用[]
@PostMapping("/attr/relation/delete")
public R deleteRelation(@RequestBody AttrGroupRelationVo[] vos){
    attrService.deleteRelation(vos);
    return R.ok();
}

@Override
public void deleteRelation(AttrGroupRelationVo[] vos) {
    //传入参数 批量删除 传入关联关系实体类
    //Arrays.asList的作用是将数组转化为list
    List<AttrAttrgroupRelationEntity> entites = Arrays.asList(vos).stream().map((item) -> {
        AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
        BeanUtils.copyProperties(item, relationEntity);
        //item复制到 relationEntity
        return relationEntity;
    }).collect(Collectors.toList());
    relationDao.deleteBatchRelation(entites);
}

void deleteBatchRelation(@Param("entites") List<AttrAttrgroupRelationEntity> entites);

<delete id="deleteBatchRelation">
    delete from pms_attr_attrgroup_relation where
--         遍历循环删除 item  separator是分隔符 or 
    <foreach collection="entites" item="item" separator="OR">
    (attr_id=#{item.attrId} and attr_group_id=#{item.attrGroupId})
    </foreach>
</delete>

定义Vo

image.png

public class PurchaseDoneVo {
    private Long id;
    private List<PurchaseItemDoneVo> items;
}
和
public class PurchaseItemDoneVo {
    private Long itemId;
    private Integer status;
    private String reason;
}

RequestBody  接收处理
@PostMapping("/done")
public  R finish(@RequestBody PurchaseDoneVo doneVo){
    purchaseService.done(doneVo);
    return R.ok();
}
void done(PurchaseDoneVo doneVo);

标签:attr,自定义,relationEntity,Long,public,respVo,Vo,id
From: https://blog.51cto.com/u_15993308/6183970

相关文章

  • 自定义aop
    自定义aopAspectJ应该算的上是Java生态系统中最完整的AOP框架了。SpringAOP和AspectJAOP有什么区别?SpringAOP属于运行时增强,而AspectJ是编译时增强。SpringAOP基于代理(Proxying),而AspectJ基于字节码操作(BytecodeManipulation)。SpringAOP已经集成......
  • Winform-自定义按钮_播放图标
    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Drawing.Drawing2D;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingSystem.Management.Inst......
  • 实现自定义接口以及嵌套类的应用
    interfaceCityNumber{//定义两个接口intgetNumber();}interfaceDestination{StringgetName();}publicclassMain{publicclassCitysimplementsCityNumber{//嵌套的内部类1privateintid=518;@OverridepublicintgetNum......
  • 学习笔记396—自定义Docker镜像推送到Docker Hub实战
    自定义Docker镜像推送到DockerHub实战云原生探索的必经之路—容器化,而容器化目前最主流的技术莫过于Docker了,因为之前也大量的输出过Docker相关的技术博客,如果感兴趣的话可以直接访问专栏:​​《探索云原生》​​,按需学习哦。这篇文章还是从Docker入手,从0开始讲述下如何将自己的D......
  • 自定义SpringBoot Starter
    1.Starter加载原理Springboot通过SpringBootApplication注解启动项目,springboot启动的时候,会将项目中所有声明为bean对象的实例加载到IOC容器。除此之外也会将starter里的bean信息加载到ioc容器,从而做到0配置,开箱即用。1.1加载starter:Springboot项目启动时,Springboot通过@Spri......
  • 关于QMetaObject::invokeMethod的测试
    此函数可以用来在子线程中委托主线程执行特定函数。QMetaObject::invokeMethod默认在主线程中执行函数,除非指定连接方式为Qt::DirectConnection。以下是测试用的代码和输出结果。头文件:classMCcrt:publicQThread{Q_OBJECTpublic:MCcrt(QObject*parent=0):......
  • 自定义指令之光标定位到输入框
    下面是一个自定义指令的例子,当一个input元素被Vue插入到DOM中后,它会被自动聚焦。解决方案:在input标签里增加ref属性,然后在exportdefault中增加构子函数mounted(挂载完成),写入以下代码,表示页面渲染完成后光标定位输入框。mounted(){    this.$nextTick(()=......
  • 自定义结果类
    自定义结果类参考:https://www.jianshu.com/p/398bf406f8e6参考:https://blog.csdn.net/zhang150114/article/details/90477002参考:https://zhuanlan.zhihu.com/p/414255238参考:https://blog.csdn.net/dedede001/article/details/128267515......
  • 58、K8S-监控机制-Prometheus-自定义metrics
    Kubernetes学习目录1、安装python环境1.1、下载python软件wgethttps://www.python.org/ftp/python/3.9.16/Python-3.9.16.tgz1.2、安装依赖包yuminstallgccgcc-c++glibc-develglibczlib-develzlibopenssl-developensslsqlite-develreadline-develbzip2-devel......
  • Oracle自定义splitstr
     CREATEORREPLACEFUNCTIONSPLITSTR(P_STRINGINVARCHAR2,P_DELIMITERINVARCHAR2)RETURNSTR_SPLITPIPELINEDASV_LENGTHNUMBER:=LENGTH(P_STRING);V_STARTNUMBER:=1;V_INDEXNUMBER;BEGINWHILE......