【问题标题】:VO and DAO, How to design classes and execute queryVO 和 DAO,如何设计类和执行查询
【发布时间】:2016-11-08 16:02:56
【问题描述】:

我有 3 张桌子:

Item: item_id (pk), short_description, ...
SupplierItem: item_id (fk), supplier_id (fk), vendor_product_number, ...
Supplier: item_supplier (pk), name, ...

Item 和 Supplier 之间的关系是多对多的。供应商项目是 中间表。
我想使用 VO 和 DAO。

如何在 VO (Java) 中设计这个?

之后,如何在 java 代码中进行以下查询。

select i.item_id, i.short_description, s.vendor_product_number as FONUA_PRODUCT_CODE 
from item i 
left join supplier_item s
on i.item_id=s.item_id
where ((i.item_id=:item_id) OR :item_id IS NULL)
and i.parent_item_id is null
order by vendor_product_number DESC"

我还是不明白使用VO和DAO的概念。

谢谢

【问题讨论】:

    标签: java database spring dao


    【解决方案1】:

    DAO 将是您定义查询并在数据库上获取查询调用结果的 java 文件。 查询结果将通过将它们设置为特定 VO 属性的值来保存。

    例如:

    您的查询返回,

    • item_id、short_description、vendor_product_number

    假设您必须创建另一个 java 文件,例如 ItemVO.java 并声明 ItemVO 对象的特定属性, 例如:

    private String itemId;
    private String shortDescription;
    private String vendorShortNum;
    /*Define your getters and setters*/
    

    在 DAO 文件中,您必须将查询结果映射到 VO 文件的对象。

    ItemVO itemVO= new ItemVO();
    itemVO.setItemId(/*the particular column value from the query result*/);
    itemVO.setShortDescription(/*the particular column value from the query result*/);
    itemVO.setVendorShortNum(/*the particular column value from the query result*/);
    

    【讨论】:

    • 我需要创建中间表吗? (SupplierItem) 我如何表示这种关系?
    • 不,您不必这样做,即使您决定使用此查询获取新列,您也可以向 VO 添加一个新属性并从查询结果中设置相同的属性
    • 如果你在表中插入一些东西,那么你将不得不使用像休眠这样的东西来显示表之间的关系,例如:表 1 将受到影响,表 1 与表 2 和表 2 的某些列也会受到影响,在这种情况下,您将不得不使用另一种映射技术,如休眠
    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多