Извлечение данных из базы данных. Общий метод извлечения? - PullRequest
2 голосов
/ 29 октября 2010

Мои классы доступа к данным часто имеют метод 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
}
 

1 Ответ

1 голос
/ 29 октября 2010

Это действительно зависит от того, как вы организовали различные категории сущностей в вашей базе данных и как вы их извлекаете. Например, если у вас есть одна большая денормализованная таблица, которая может содержать много типов сущностей, причем для каждого типа требуется разная комбинация заполняемых столбцов, вам придется извлечь все столбцы, если вы хотите получить все типы сущностей в одном запросе. *

И наоборот, если вы организовали свою схему базы данных в нормализованной форме, у вас вполне может быть таблица родительских сущностей (которая может просто содержать идентификатор сущности) и несколько вложенных таблиц, по одной на тип сущности. В этом случае вы можете выполнить несколько сделанных на заказ запросов для получения различных типов сущностей; например,

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

Компромисс с этим вторым подходом заключается в необходимости выполнения нескольких запросов, что на самом деле может быть медленнее. Однако я решил эту проблему в своем приложении, запустив запросы параллельно и скомпилировав результаты в приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...