Java/Быть в спящем режиме: как написать код ДАО для сложного SQLs

Мое текущее рабочее место использует стандартное соединение Spring/Hibernate/JSP для обслуживания содержания его клиенту Flex через XML. Существует много путей, которыми получают доступ к данным, но самый распространенный - через прямые вызовы SQL к базе данных и ручное преобразование в XML.

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

Я знаю, что обычно правильный способ пойти состоит в том, чтобы выбрать использование объектов, в спящем режиме запросы и объекты. Однако в некоторых наших запросах результаты не могут быть отображены на сингле, в спящем режиме объект, и я боюсь, что прямой SQL должен использоваться.

Каков был бы правильный способ пойти об этом? Существует ли способ сделать динамические запросы SQL более четкими? Существует ли способ сделать, он с В спящем режиме объекты?

Я сожалею об абстрактной природе этого вопроса. Я надеюсь, что у Вас есть хороший вход, тем не менее, ;)

Цените свои комментарии!

6
задан Bozho 18 November 2010 в 15:14
поделиться

3 ответа

Да, вы можете - синтаксис T-SQL такой же, как в любом другом вызове кроссных баз данных (например, в хранимой процедуре).

Для ссылки на ваши таблицы во второй базе данных вам просто нужно:

[База данных]. [Схема]. [TableName]

Так что вы получите что-то вроде

CREATE VIEW [dbo].[YourView]
as
select 
a.ID, 
a.SomeInfo, 
b.SomeOtherInfo
from TableInA a
join DatabaseB.dbo.TableInB b
on -- your join logic goes here

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

-121--1355460-

HQL поддерживает запросы, которые извлекают более одного объекта. Присоединения также поддерживаются. Например:

SELECT new com.package.model.SearchResultEntry(product, price) FROM Product product, 
    IN(product.variantPrices) price WHERE ....

Вышеупомянутое возвращает новый объект (не-объект!), Который состоит из двух объектов - продукта и цена. Вы также можете использовать список , чтобы поставить разные объекты из того же результата.

Дайте в этом учебном пособии .

Сделайте эти запросы с динамическими параметрами и используйте наиболее подходящие классы для хранения их как @NamedQueries

3
ответ дан 17 December 2019 в 04:46
поделиться

Вы можете рассмотреть возможность перемещения некоторых из SQL-логики в базу данных и доступ к данным через представления: что представляет свои собственные проблемы, конечно (у вас сейчас есть бизнес-логика в двух местах), но может Стоять рассмотрения.

2
ответ дан 17 December 2019 в 04:46
поделиться

другое использование - простые счетчики, такие как: perl -e 'foreach (1.. 100) {print «$ _\n»} '

-121--3702235-

В языковых расширениях GNU C приведение к объединению помечается как расширение к стандарту C. Так что, скорее всего, вы не найдете его в C99 или любом другом стандарте C. Компилятор IBM C также поддерживает это расширение.

-121--2415539-

Предполагая, что вы не можете сделать то, что вам нужно в HQL посмотрите на ibatis Это позволит вам настроить сопоставления с помощью определенных SQL запросов и хранимых процедур. Это также будет еще одна зависимость от вашего проекта, так что учитывайте это также.

0
ответ дан 17 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: