LINUX.ORG.RU

Java-класс для представления выборок из базы

 , , ,


0

3

Здравствуйте.
Суть задачи: есть таблица с данными и есть web-интерфейс. В интерфейсе настраиваются параметры запроса (выбор даты, выбор столбцов таблицы, фильтры, группировка, сортировка) и делается запрос.
На основе выбранных параметров формируется sql-запрос.

Вопрос:
Какой класс лучше всего сделать, чтобы можно было удобно записывать и считывать оттуда произвольные выборки?

Т.е. допустим, выбрал юзер поля User, Country, Time и метрики Installs, Clicks.
Для представления всего этого придумывается что-то вроде map'ы, в которой значением будет Map<Metrics, Double> (где metrics - метрика, а double - это значение метрики).
А вот ключем, по идее, может быть любой произвольный набор полей - Key<User, Country> или Key<Country> или Key<Country, User> и тд.

Т.е. для ключа важно:
1. Произвольное количество и порядок элементов.
2. Уникальность элементов (чтобы не было Key<User, User>).
3. Сохранение информации о классе элемента (чтобы потом знать, что elem.getId() - это id юзера, а не страны).
4. Чтобы Key был comparable.
5. Ну и чтобы он не был слишком уж тяжелым и медленным.

На ум приходит только:
Создать интерфейс/абстрактный класс Field, у которого будет некая метка CLASS_ID. Все сущности-поля будут реализовывать/наследовать от Field'а и у каждого будет константное значение этой метки (например, User - 1, Country - 2 и тд).
И тогда ключем будет просто какой-нибудь TreeSet<Field>.
Но такой подход кажется очень громоздким.
Или нет? Какие еще есть варианты?

★★★★★
Ответ на: комментарий от OldWiseCat

Выборка по ключу там будет автоматом помещена в коллекцию, причем либо при создании объекта, либо при первом обращении к коллекции выборки

OldWiseCat ★★
()
Ответ на: комментарий от kovrik

С конфигом на XML

http://habrahabr.ru/post/29694/

С аннотациями

http://habrahabr.ru/post/132385/

Но, вообще, гуглить надо и самому попробовать накропать, ну и иметь IDE с проверкой ошибок этой фигни и нормальной обработкой исключений. Например, IDEA Community Edition не умеет в Hibernate, а Ultimate умеет и хорошо

OldWiseCat ★★
()

Мало что понял из всего вышесказанного, но для в качестве класса для чтения/записи данных я бы сделал обётрку Map<String,Vector<String>> (т.е. - поле, записи поля) и нагородил бы кучку костылей вокруг этого.

crutch_master ★★★★★
()
Ответ на: комментарий от kovrik

Да, человек посоветовал Hibernate, он прав, но так уже не по пацански. JPA - стандарт, но Hibernate его реализация. Потому лучше бы использовать Hibernate через интерфейсы JPA. Пакет javax.persistence.* душу греет. Хорошо то, что есть такая штука как Criteria API. Она позволяет строить запросы динамически, тоесть ты по своему ключу можешь в методе пройтись, создать Criteria и запустить на базе. Это безопасная альтернатива склеиванию здоровенной динамической SQL, не будет SQL Injection, ошибок синтаксиса.

Но если у тебя выборки совершенно произвольные, то или 2^n-1 индексов или Full Table сканы.

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Ты имеешь в виду, что я слишком абстрактно выразился? Думаю, нет, ведь по этим двум ключевым словам легко гуглится _нужная_ информация.

f1xmAn ★★★★★
()
Ответ на: комментарий от kovrik

Поищи книжку «Гибкая разработка приложений на JAVA» с помощью Spring, Hibernate и Eclipse. Автор индус :) , похоже, Анил Хемпраджани. Книжка простенькая. Как раз для начинающих. Не новье, конечно, но там все есть и по жевано, и примеры...

vada ★★★★★
()

я посоветую посмотреть в сторону jOOQ. Легко прикручивается, легко используется.

bvn13 ★★★★★
()
Ответ на: комментарий от bvn13

О, спасибо, выглядит интересно

kovrik ★★★★★
() автор топика

буду оригинальным - openjpa, eclipse link2, ibatis

windofchange
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.