Взаимодействие Java и базы данных. Как использовать это в чистом коде?

#java #sql #xml #templates #software-design

#java #sql #xml #шаблоны #программное обеспечение-дизайн

Вопрос:

Я ищу новые идеи о том, как сделать свою жизнь немного проще. У меня есть несколько классов Java, которые используют набор шаблонов SQL, сохраненных в XML-файле. Например, у меня есть функция, которая вызывается getTracksForArtist(Artist artist) и возвращает список объектов отслеживания из базы данных. Для поиска у меня есть несколько шаблонов xml, которые различаются в зависимости от проблем сортировки / группировки, которые загружаются при вызове соответствующих методов. В getTracksForArtist(Artist artist) методе я вызываю queryMap.getTemplate(«getTracks»)`, который восстанавливает шаблон, который может быть изменен для соответствующего метода. Это работает, но я думаю, что это действительно уродливо. Во-первых: я бы не хотел получать шаблон со строкой. Я также хотел бы посмотреть, есть ли шаблоны, которые никогда не используются, что важно, поскольку XML-файл шаблона стал довольно большим.

У меня была идея заменить xml-файл перечислением или каким-либо представителем класса, внутри которого хранится sql и который может быть вызван, getTemplate(GetArtists) например. Но проблема здесь в том, что многострочные строки — настоящая проблема в java. Есть несколько плагинов для eclipse, которые обещают решить эту проблему, но они работают не так, как нужно, и мне не очень нравится решать проблему дизайна с помощью плагина.

Как вы организуете взаимодействие java с базой данных?

Комментарии:

1. Используйте шаблон DAO и реализуйте поверх ORM-подхода

2. На самом деле это то, что я хотел бы сделать, но (бизнес) кодовая база довольно большая, и для изменения этого потребовалось бы много встреч. Но кроме этого, это не решило бы проблему длинных операторов sql, которые должны где-то храниться.

3. В прошлом я реализовывал нечто подобное тому, что вы описываете (реальную ситуацию, а не ваши идеи по улучшению). Если бы мне пришлось перезапустить, я бы попытался интегрировать Mybatis ( mybatis.org/mybatis-3/getting-started.html ). Также, если вы не планируете его интегрировать, возможно, стоит взглянуть на их подход (отказ от ответственности: я всегда предпочитал не смешивать код и SQL, чтобы люди, разбирающиеся в базах данных, могли взглянуть и предложить улучшения).

4. На первый взгляд, это было бы именно тем, что решило бы множество проблем. По-прежнему не было бы способа узнать, существует ли мертвый XML, но это хорошее начало. Я изучу это завтра и посмотрю, соответствует ли это моим потребностям. Пока спасибо!

5. Если ваши запросы кажутся действительно сложными, вы могли бы рассмотреть возможность добавления уровня абстракции в базу данных путем создания представлений базы данных, которые инкапсулируют логику, необходимую для запроса некоторой сущности домена. Поддерживать их намного удобнее, чем набор SQL-запросов в XML-файлах — самое большое преимущество заключается в том, что они предварительно скомпилированы (вы видите очевидные ошибки во время компиляции и во время выполнения). JdbcTemplate от Spring — это один из фреймворков, который помогает избежать части шаблонного кода на стороне Java.