属性分组
/**
* 获取分类属性分组
* select * from pms_attr_group where catelog_id = ?
* and (attr_group_id = ? or attr_group_name like ? or descript like ?)
* @param params
* @param catelogId
* @return
*/
@Override
public PageUtils queryPage(Map<String, Object> params, Long catelogId) {
// 1.构造通用wrapper
QueryWrapper<AttrGroupEntity> wrapper = new QueryWrapper<AttrGroupEntity>();
// 2.判断是否输入了 检索关键字:key
String key = (String) params.get("key");
if(!StringUtils.isEmpty(key)){
wrapper.and((obj) -> obj.eq("attr_group_id", key)
.or().like("attr_group_name", key)
.or().like("descript", key));
}
// 3.判断是否选中分类id
// 3.1.未选中(默认为0)
if(catelogId == 0){
IPage<AttrGroupEntity> page = this.page(
new Query<AttrGroupEntity>().getPage(params),
wrapper
);
return new PageUtils(page);
}
// 3.2.选中
wrapper.eq("catelog_id", catelogId);
// 返回分页对象
IPage<AttrGroupEntity> page = this.page(
new Query<AttrGroupEntity>().getPage(params),
wrapper
);
return new PageUtils(page);
}
/**
* 商品的子分类
*/
@JsonInclude(NON_EMPTY) // 为空时不携带该值
@TableField(exist = false)
private List<CategoryEntity> children;
/**
* 级联选择器回显,查出该孩子的祖先路径
*/
@RequestMapping("/info/{attrGroupId}")
public R info(@PathVariable("attrGroupId") Long attrGroupId){
AttrGroupEntity attrGroup = attrGroupService.getById(attrGroupId);
Long catelogId = attrGroup.getCatelogId();
// 根据catelogId查出分类路径
Long[] path = categoryService.findCatelogPath(catelogId);
attrGroup.setCatelogPath(path);
return R.ok().put("attrGroup", attrGroup);
}
/**
* 根据catelogId查出分类路径
* @param catelogId
* @return
*/
@Override
public Long[] findCatelogPath(Long catelogId) {
List<Long> ids = new ArrayList<>();
while(catelogId != 0){
ids.add(catelogId);
catelogId = query().eq("cat_id", catelogId).one().getParentCid();
}
Collections.reverse(ids);
return ids.toArray(new Long[ids.size()]);
}
各类对象
1. PO(Persistent Object)
持久对象 ,即在持久层与数据库中的表结构相对应的对象。通常是与数据库表一一对应的实体类,字段对应表的列。例如,数据库中有一个 User
表,PO 就是一个 User
类,代表一条记录。
2. VO(Value Object)
值对象 ,通常用来表示数据的视图层,封装了一些业务数据,并且一般是只读的。VO 通常用于向展示层传递数据,可以是与 PO 类似的结构,但可能只包含展示需要的字段,而不是数据库的全部字段。
3. BO(Business Object)
业务对象 ,封装业务逻辑的对象。BO 代表在业务层操作的对象,它们通常包含业务逻辑或方法,与应用程序的业务流程密切相关。BO 可能会调用多个 DAO 或与多个实体(DO)进行交互。
4. DO(Data Object)
数据对象 ,也称为 Domain Object ,通常与数据库中的表结构对应。DO 可以与 PO 类似,但在某些框架中会有所区分,DO 更注重领域层次的概念。例如,某个业务领域中的 Order
可以是一个 DO,用于表示领域内的订单数据和行为。
5. DAO(Data Access Object)
数据访问对象 ,用于封装对数据库的访问操作。DAO 通过方法提供与数据库交互的接口,比如增删改查操作。DAO 层将数据库操作封装成方法,使得业务逻辑不需要直接处理数据库的细节。
6. DTO(Data Transfer Object)
数据传输对象 ,用于在不同层之间传输数据。DTO 一般是从业务层到表现层的数据封装,通常是 POJO。DTO 通过序列化与反序列化机制进行传输,常用于分布式系统、远程调用或 API 接口的数据传输。
7. POJO(Plain Old Java Object)
简单的Java对象 ,指的是没有任何特别要求的普通 Java 对象,没有继承或实现任何特殊的类或接口。POJO 是最基本的对象结构,可以包含属性、Getter/Setter 方法、构造器等,但不应该有任何与特定框架相关的依赖