Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Kertis138
3 / 3 / 1
Регистрация: 25.02.2016
Сообщений: 269
1

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

30.07.2018, 12:07. Просмотров 690. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2018, 12:07
Ответы с готовыми решениями:

xml - файл, упаковка в jar и перещение архива
Доброго времени суток. Имеется build.xml файл, посредством которого некоторые...

Вынос DTD в отдельный файл.
Есть XML: <?xml version = '1.0' encoding = 'UTF-8'?> <!DOCTYPE config > ...

Java. Код HTTP запроса
Как получить код у запроса HTTP?

Сложность SQL запроса и Java
Один и тот же код - меняю только вставляемый запрос. в первом случаи 13 тысяч...

Java не выдает результаты запроса к бд из-за слэша
Java не выдает результаты запроса к бд, так как проблема в обратном слэше, но...

3
xoraxax
1373 / 1306 / 389
Регистрация: 05.07.2013
Сообщений: 6,294
Завершенные тесты: 2
30.07.2018, 12:13 2
насколько мне известно нет в спринге готового механизма. Однако, если у тебя много таких запросов, никто не мешает тебе написать BPP, который будет читать файлы и инжектить их содержимое в твои переменные, например.
1
Kertis138
3 / 3 / 1
Регистрация: 25.02.2016
Сообщений: 269
30.07.2018, 12:35  [ТС] 3
Цитата Сообщение от 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
xoraxax
1373 / 1306 / 389
Регистрация: 05.07.2013
Сообщений: 6,294
Завершенные тесты: 2
30.07.2018, 13:22 4
Лучший ответ Сообщение было отмечено Kertis138 как решение

Решение

делаешь аннотацию @ExternalSql(filename="path_to_sql.sql")
пишешь BPP ExternalSqlAnnotationBeanPostProcessor
в пост процессоре ищешь поля отмеченные аннотацией, достаешь из аннотации имя файла, читаешь содержимое, инжектишь в поле
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2018, 13:22

Java hibernate обработка результата запроса SELECT
Здравствуйте. Скажите пожалуйста - какой способ обработки таблицы,...

java.net.MalformedURLException: no protocol при попытке послать POST запроса.
пытаюсь послать POST запрос на сервер. Пишет java.net.MalformedURLException: no...

Как декомпилировать .class файл обратно в .java файл?
Как декомпилировать .class файл обратно в .java файл?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru