繁体   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