一: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