当前位置: 首页 > article >正文

微服务实战——属性分组与各类对象

属性分组

/**
 * 获取分类属性分组
 * 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 方法、构造器等,但不应该有任何与特定框架相关的依赖

http://www.kler.cn/news/330412.html

相关文章:

  • 如何修改Nuget包的缓存路径
  • 快速掌握-vue3
  • 一、I/O设备的概念
  • Pikachu-xss实验案例-键盘记录
  • MapBox Android版开发 6 关于Logo
  • 问:LINUXWINDOWS线程CPU时间如何排序?
  • MySQL(面试问题)
  • 计算机毕业设计 基于Hadoop的租房数据分析系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
  • YOLO11改进 | 卷积模块 | 添加选择性内核SKConv【附完整代码一键运行】
  • 什么是IDE(集成开发环境)?
  • 【51单片机】点亮LED之经典流水灯
  • 一键生成PPT的AI工具-Kimi!
  • Springboot + netty + rabbitmq + myBatis
  • oracle 新建用户,用户插入数据报错:ORA-01950: 对表空间 ‘USERS‘ 无权限
  • 23 vue3之详解scoped样式穿透vuecss新特性
  • Java面试题之JVM面试题
  • 2. 将GitHub上的开源项目导入(clone)到(Linux)服务器上——深度学习·科研实践·从0到1
  • 攻防世界----->easyre-153
  • 在PC端连接苹果手机(iPhone)时,即使已经开启了开发者模式(开发者权限),但仍然无法成功连接,是什么原因?
  • C++ 语言特性11 - 继承构造函数