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信息
}
获取指定分组关联的所有属性相应数据
//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
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