深入理解Java中的PO、BO、VO、DTO和DAO概念

版权申诉
5星 · 超过95%的资源 1 下载量 124 浏览量 更新于2024-11-12 收藏 6KB ZIP 举报
资源摘要信息:"POBOVODTOPOJODAO.zip_dto_java dto dao_java vo_qovod" 知识点一:PO(Persistent Object,持久对象) PO通常指的是与数据库表结构相对应的一个Java对象,用于表示数据库中的一条记录。每个属性对应数据库表的某一个字段,通过某种数据库操作接口可以将PO对象保存或更新到数据库中。PO一般作为业务逻辑层(BO)与数据持久层(DAO)之间交换的传输对象,它的封装使业务逻辑层不需要关心数据库的具体操作细节。 知识点二:BO(Business Object,业务逻辑对象) BO是业务逻辑处理的核心对象,它封装了业务逻辑和业务数据,通常包含了多个PO对象的业务处理逻辑。在复杂的应用系统中,BO可以看作是业务层的核心,负责处理业务需求中的具体逻辑,比如计算、决策、协调等,BO通常会调用多个DAO来获取所需的PO对象,以及执行业务数据的持久化。 知识点三:VO(Value Object,值对象)和View Object(视图对象) VO是一个通用的概念,它可以是一个简单值对象(Java中的POJO),也可以是一个复杂对象。在不同的上下文中有不同的含义。在数据传输中,VO通常是一个包含数据的简单对象,用于从系统的一个部分向另一个部分传递数据。View Object通常指的是用于封装数据展示层(如Web层)所需要的数据的对象,它们通常是通过DAO层查询数据库后组装而成。 知识点四:QO(Query Object,查询对象) QO是用于封装查询条件的对象,它在数据访问层(DAO)中使用。QO对象可以包含多个查询条件,用于构造复杂的数据库查询语句,这样可以更灵活地根据不同的业务需求来查询数据。在一些ORM框架中,QO也可以对应框架提供的查询构建器(Query Builder)。 知识点五:DAO(Data Access Object,数据访问对象) DAO是一种设计模式,用于抽象和封装所有对数据源的访问逻辑。在Java中,DAO对象负责与数据库进行交云,提供一系列操作接口来完成数据的CRUD(创建、读取、更新、删除)操作。使用DAO模式的好处是可以将业务逻辑与数据访问逻辑分离,使得业务逻辑更加清晰,也更容易进行单元测试。 知识点六:DTO(Data Transfer Object,数据传输对象) DTO是一种设计模式,用于在网络传输过程中,封装数据集合或多个数据项的数据对象。它是为了降低网络通信的消耗,减少网络请求次数,因此通常会将多个相关数据项组合在一个DTO中传输。在服务层(Service Layer)中,DTO可以用来传递数据到不同的组件或层之间,而与特定的数据源无关。 知识点七:标签与文件名称的关系 在给定的标签中,“dto_java”和“dao_java”表示该文档或代码库可能包含与数据传输对象和数据访问对象相关的Java实现。标签中的“vo_qovod”可能指的是视图对象和查询对象的实现。由于文件标题含有“POBOVODTOPOJODAO”,我们可以推测这个压缩包中可能包含了上述所有对象模型的Java实现代码和相关文档。 知识点八:文档与代码的结合使用 给定的文件名称列表中只有一个.doc文件,表明这个压缩包可能主要包含的是文档说明而非代码。文档可能详细描述了PO、BO、VO、DTO、QO和DAO在实际应用中的设计和实现细节,以及这些对象模型之间的关系和最佳实践。这对于理解整个系统架构和进行系统设计是非常重要的参考。 以上内容详细说明了标题和描述中所提到的知识点,并且结合标签和文件名称列表,对可能包含的内容进行了合理的推测。这些知识点对于掌握后端系统设计、代码架构以及数据操作等方面有着重要的作用。

优化SQL select round( ohbmc.after_actual_amount/zz,0) cost_moneyi ,count(distinct case when ddp.orig_plan_rid = -1 then null else ddp.orig_plan_rid end) AS orig_num ,array_agg (dlt.state) AS loading_state ,count(DISTINCT CASE WHEN ddp.sale_planid = -1 THEN NULL ELSE ddp.sale_planid END) AS saleid_num--销地已计划数量 ,array_agg(dto.state) AS saletransport_state from ( SELECT id AS origin_planid , unnest(cabinet_rule_id) cabinet_rule_id -- 判断 next_plan_id 本身是空和 next_plan_id 为 {} ,unnest(case when (next_plan_id is null or next_plan_id[1] is null) then ARRAY[-1]::integer[] else next_plan_id end) as sale_planid --销地计划 , case when dp.plan_receiver_id is null then -1 else dp.plan_receiver_id end orig_plan_rid --产地计划 FROM ods.ods_durian_delivery_plan as dp left join ods.ods_hl_commodity_category as hcc on hcc.category_id = dp.category_id WHERE dp.type = 'ORIGIN' AND dp.deleted = 99 AND dp.tenant_id = 1 and cabinet_rule_id='{8}'or cabinet_rule_id='{9}'or cabinet_rule_id='{10000005}'---取白心火龙果 AND hcc.category_name = '火龙果') as ddp LEFT JOIN ods.ods_durian_loading_task AS dlt ON dlt.plan_id = ddp.origin_planid and dlt.plan_type='ORIGIN' AND dlt.deleted = 99 LEFT JOIN ods.ods_durian_transport_order AS dto ON dto.plan_id = ddp.sale_planid AND dto.deleted = 99 LEFT JOIN ods.ods_durian_receipt_task AS drt ON drt.plan_id = ddp.sale_planid AND drt.deleted = 99 LEFT JOIN ods.ods_durian_transport_order AS dto1 ON dto1.plan_id = ddp.sale_planid AND dto1.sort_no = 1 AND dto1.deleted = 99 left join (select odlsi.plan_id,sum(odlsi.quantity) zz from ods.ods_durian_loading_sku_item odlsi group by 1) odlsi on odlsi.plan_id=dlt.plan_id left join (select *, unnest(case when ( odbr.bill_main_id is null or odbr.bill_main_id is null) then ARRAY[-1]::integer[] else odbr.bill_main_id end) bill_main_id_r from ods.ods_durian_bill_rel odbr) odbr on odbr.data_id= dlt.plan_id and odbr.data_type='ORIGIN_FEE' left join ods.ods_hl_bill_main_currency ohbmc on ohbmc.bill_main_id=odbr.bill_main_id_r and ohbmc.deleted=99 group by 1;

2023-06-13 上传