Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужна консультация / 7 сообщений из 7, страница 1 из 1
23.06.2015, 18:08
    #38990956
AK1988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна консультация
Здравствуйте!
Нужен совет по реализации архитектуры расширенного поиска на сайте.
Пользователю предоставляется десяток параметров которые передаются в контроллер в виде мапы. Основываясь на выбранных пользователем параметрах нужно составить sql запрос, который вернет контроллеру список товаров. Так как параметры заранее неизвестны нужен конструктор для динамического создания sql запроса. Как бы Вы реализовывали такой конструктор?
...
Рейтинг: 0 / 0
23.06.2015, 18:20
    #38990972
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна консультация
Полнотекстовый поиск точно не то?
А так динамические запросы строятся легко и просто через
1) Hibernate/JPA Criteria API
2) QueryDSL, jOOQ
...
Рейтинг: 0 / 0
23.06.2015, 18:24
    #38990975
AK1988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна консультация
Blazkowicz, спасибо, но к сожалению не владею Hibernate, только jdbc.
...
Рейтинг: 0 / 0
23.06.2015, 20:23
    #38991048
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна консультация
...
Рейтинг: 0 / 0
24.06.2015, 06:09
    #38991218
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна консультация
AK1988Blazkowicz, спасибо, но к сожалению не владею Hibernate, только jdbc.

Тогда в чем проблема?
Либо
1) Пишешь "универсальный" запрос, со всеми возможными параметрами
2) Формируешь запрос на лету в виде строки
В первом случае будет проблема оптимизации запроса
Во втором о безопасности от "SQL-иньекций" нужно будет думать самому.

А так, для динамических запросов действительно лучше использовать что-то вроде CriteriaAPI.
...
Рейтинг: 0 / 0
24.06.2015, 13:35
    #38991601
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна консультация
CriteriaAPI -

Если таблица - одна - одно entity

то будет что-то подобное :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
        DetachedCriteria criteria = DetachedCriteria.forClass(Carts.class);
        if (name != null) {
            criteria.add(Restrictions.eq("name", name));
        }
        if (name1 != null) {
            criteria.add(Restrictions.eq("name", name1));
        }
        if (name2 != null) {
            criteria.add(Restrictions.eq("name2", name2));
        }
        if (from != null && to != null && to.after(from)) {
            criteria.add(Restrictions.between("creationDate", from, to));
        } else if (from != null && to == null) {
            criteria.add(Restrictions.ge("creationDate", from));
        } else if (from == null && to != null) {
            criteria.add(Restrictions.lt("creationDate", to));
        }
        criteria.addOrder(Order.desc("creationDate"));

        return ht.findByCriteria(criteria, 0, 100);



Если этого подхода не хватит ,то смотрите в сторону Apache Solr

Да порог вхождения большой , но зато один раз нужно написать и все :)
...
Рейтинг: 0 / 0
24.06.2015, 14:13
    #38991651
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна консультация
Atum1CriteriaAPI -

Если таблица - одна - одно entity


Для нескольких таблиц, будет точно так же.
Только их надо будет еще и JOIN'нить


Atum1Если этого подхода не хватит ,то смотрите в сторону Apache Solr

Да порог вхождения большой , но зато один раз нужно написать и все :)

Вообще вещь "перпендикулярная".
Ничего сложного нет.
"Из коробки" там почти все уже настроено.
Остается прописать откуда и что индексировать.

Но для реляционных данных смысла особого нет, т.к. в БД индексация по "точным" данным лучше.
А вот натравить на гигабайты документов милое дело.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужна консультация / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]