簡體   English   中英

檢索數據庫數據-一般檢索方法?

[英]Retrieving database data - General retrieve method?

我的數據訪問類通常有一個稱為loadDataToEntity的方法或類似的方法。 該方法以一個結果集為例,並填充一個傳遞給客戶端使用的實體類。

很好,因為所有使用存儲過程來檢索數據的方法都可以將結果集傳遞給loadDataToEntity方法並返回一個實體。

因此,這是減少代碼的好方法,但我經常聽到您應該檢索盡可能少的列。 要使用我的通用方法,所有存儲過程都需要獲取loadDataToEntity()所需的所有列。 同樣,當將一列添加到表中並由存儲過程檢索時,所有其他存儲過程都需要更改,並且還要檢索該列。

我想知道是否有更好的方法既可以實現通用方法又可以有時根據存儲過程來檢索不同數量的列?

 
public Entity getById(int id)  
{    
    ResultSet rs;
    //call stored procedure A and stuff  
    return loadDataToEntity(rs);  
}  
public Entity getByName(String name)
{
    ResultSet rs;
    //call stored procedure B and stuff
    return loadDataToEntity(rs);
}
public Entity loadDataToEntity(ResultSet rs)
{
    // fill and return entity here
}
 

這實際上取決於您如何在數據庫中組織不同類別的實體,以及如何檢索它們。 例如,如果您有一個大的非規范化表,其中可以包含許多實體類型,而每種類型都需要填充不同的列組合,那么如果希望在單個查詢中獲取所有實體類型,則必須獲取所有列。

相反,如果您以規范化的形式組織了數據庫架構,則很可能會有一個父實體表(可能只包含實體ID)和多個子表,每個子表一個。 在這種情況下,您可以運行多個定制查詢以檢索各種實體類型。 例如

select E.EntityId, S.EntityName, S.EntityAge
from Entity E
inner join SubEntity S on E.EntityId = S.EntityId

要么

select E.EntityId, A.EntityAddress, A.EntityGender
from Entity E
inner join AnotherSubEntity A on E.EntityId = S.EntityId

使用第二種方法的權衡是需要運行多個查詢,這實際上可能會更慢。 但是,我通過並行運行查詢並在應用程序內將結果多路復用在一起來解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM