Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
6 / 6 / 1
Регистрация: 25.02.2016
Сообщений: 342

Java и упаковка запроса в отдельный файл

30.07.2018, 12:07. Показов 1389. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравтсвуйте!

Использую Spring JDBC и DAO классы выглядят примерно вот так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@Repository
@Transactional
public class ModuleDAOImpl extends JdbcTemplateInjecter implements ModuleDAO {
    public ModuleDAOImpl(JdbcTemplate jdbcTemplate) {
        super(jdbcTemplate);
    }
 
    @Override
    public ModuleInfo getBySysName(String sysName) {
        String sql =
                "SELECT mi.id as mi_id,\n" +
                "       mi.sys_name as mi_sys_name,\n" +
                "       mi.view_name as mi_view_name,\n" +
                "       mi.descriprion as mi_description,\n" +
                "       mi.owner_id as onwer_id,\n" +
                "       vl.id as vl_id,\n" +
                "       lt.id as lt_id,\n" +
                "       vl.name as vl_name,\n" +
                "       lt.name as lt_name,\n" +
                "       mv.id as mv_id,\n" +
                "       mv.version_name as mv_version_name,\n" +
                "       mv.created_at as mv_created_at\n" +
                "  FROM module_info mi\n" +
                "    LEFT JOIN module_version mv on mi.id = mv.module_id\n" +
                "    LEFT JOIN visibility_level vl on mi.visibility_level_id = vl.id\n" +
                "    LEFT JOIN launch_type lt on mi.launch_type_id = lt.id\n" +
                "WHERE mi.sys_name = 'test_module1'\n" +
                "ORDER BY mv.\"created_at\" DESC\n" +
                "LIMIT 1";
 
        return this.jdbcTemplate.queryForObject(sql, new Object[]{sysName}, new ModuleInfo_Version_VisibilityMapper());
    }
}

Собственно мне непонятно как этот ужас (запрос) красиво упаковать. Если бы в Java был синтаксис многострочного текста...
Вообщем как принято писать большие запросы в DAO классах? Неужели прям в коде? А если запрос слишком большой, оставлять эту простыню прям в коде?
Я дуамл над тем, чтобы вынести такие запросы в отдельные файлы, но где их хранить?
Вообщем подскажите как принято красиво писать DAO классы?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.07.2018, 12:07
Ответы с готовыми решениями:

Вынести Java скрипты в отдельный файл
Подскажите как вынести Java скрипты в отдельный файл? Я так понимаю в папке js создать файл, в этот файл занести все Java скрипты, а...

упаковка в ехе-файл
Здравствуйте! можно ли сделать программу небольшую портативной средствами visual studio, чтобы был один ехе-файл и его можно было запустить...

Упаковка вершин в бинарный файл
Пытаюсь добавить 3д модель в одну игру с самописным форматом Уже разобрался как упаковать координаты и текстурные координаты вершин,...

3
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
30.07.2018, 12:13
насколько мне известно нет в спринге готового механизма. Однако, если у тебя много таких запросов, никто не мешает тебе написать BPP, который будет читать файлы и инжектить их содержимое в твои переменные, например.
1
6 / 6 / 1
Регистрация: 25.02.2016
Сообщений: 342
30.07.2018, 12:35  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
который будет читать файлы и инжектить их содержимое в твои переменные, например.
То есть что то типа:

@Autowired
@Qualifier("getByNameQuery")
private String sql;

Правильно понимаю?

Добавлено через 11 минут
Пока приходит на ум такое решение:

Java
1
private SqlInjecter sqlInjecter = new SqlInjecter("moduleDAO"); //moduleDAO - папка в resources/db
И этот класс читает все sql в данной папке, то есть для данного DAO.

И потом, что то типа:
Java
1
sqlInjecter.getQuery("getByName");
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
30.07.2018, 13:22
Лучший ответ Сообщение было отмечено Kertis138 как решение

Решение

делаешь аннотацию @ExternalSql(filename="path_to_sql.sql")
пишешь BPP ExternalSqlAnnotationBeanPostProcessor
в пост процессоре ищешь поля отмеченные аннотацией, достаешь из аннотации имя файла, читаешь содержимое, инжектишь в поле
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.07.2018, 13:22
Помогаю со студенческими работами здесь

отдельный процесс для обработки каждого запроса
Создание клиент-серверных приложений под windows с установлением логического соединения (TCP/IP), используя алгоритм параллельной обработки...

Результат запроса MsSql в DataGrid в отдельный поток ?
Добрый день, подскажите пожалуйста,или направьте в какую сторону копать. Имеем приложение c#, по нажатию кнопки проходит запрос в базу...

Упаковка текстового файла в exe-файл
Возможно ли упаковать текстовый файла в exe-файл, чтоб потом открыть этот exe-файл в специальной программе?

Упаковка программы на дельфи в exe-файл на c#
Добрый день! Есть утилита exe, написанная на дельфи. Утилита действует следующим образом: при запуске с параметром виде пути к...

Упаковка проекта javaFX в jar файл
доброго времени суток! подскажите пожалуйста как создать jar файл проекта javaFX средствами IntelliJ IDEA 13 или любым способом. целый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru