LINUX.ORG.RU

Как красиво использовать БД из Java?

 , ,


0

1

Я сейчас изучаю Java (Tomcat), естественно, хочу использовать базу данных (MySQL). Нашел много руководств, но они какие-то совсем простые - там рассказывают только, куда передавать пароль и какие классы использовать. А меня интересует кое-что более глубокое:

  • Как в серьезных приложениях принято обращаться к базе данных? Создавать класс-синглтон и обращаться к нему? Если да, то вызывать что-то вроде DatabaseSingleton.getInstance().sql("select ...") или же для каждого случая создавать метод в самом синглтоне?
  • Где хранить логин и пароль для сервера БД? В settings.xml? В отдельном конфиге? Захардкоренным?

Вообще, буду крайне признателен за ссылку на подобный мануал.

PS: Использую OpenJDK7, Tomcat7, Mysql 5.5, Maven, Netbeans

★★★★

Никаких синглтонов с getInstance().

Обычно используется подход Inversion-Of-Control. Проще говоря, пишутся классы, которые получают другие инстансы классов (своих зависимостей) через конструкторы. А потом когда все готово, то или просто вручную написаным кодом, или с помощью IoC фреймворка (Spring, Guice, JavaEE/EJB/CDI) они все вместе инстанциируются и передаются друг другу.

Пароли можно хранить в двух местах.

1. .property файл. Где он находится - второй вопрос. Например он может лежать на диске, а локация файла определяется с помощью java environment variables, которые настраиваются в Tomcat. Иногда они встроены в war. Тогда на уровне сборки проекта указывается нужный профиль сборки, который подсунет нужный .property

2. JNDI. Более кошерный способ по мнению многих. База настраивается в контейнере (URL, пароли, пул соединений), а приложение просто лукапит его по имени.

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

Что касается конкретной работы с БД. Тут есть несколько вариантов

1. Кодить руками JDBC. Много кода и только SQL

2. Легковесный JDBC-wrapper. Например присутствует в Spring

3. ORM фреймворки - JPA, Hibernate, etc. Тут классы автоматически умеют сохраняться в базу и можно делать запросы в независимой от базы форме

vertexua ★★★★☆ ()

Spring JDBC + конфиг или jndi

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

Надстройка (Spring Data) над надстройкой (JPA/EntityManager) на надстройкой (Hibernate/Eclipselink) над надстройкой (JDBC) над надстройкой (драйвер БД)

Но да, проект хороший и удобный

Я думаю что не хватает надстройки повыше уровнем - абстракция над Spring :DDDD

vertexua ★★★★☆ ()
Последнее исправление: vertexua (всего исправлений: 2)

Для хранения соединения (или data source) есть разные подходы.

Основных 3 - паттерн «синглтон» (примерно как ты написал), паттерн «репозиторий» (Connection connection = Repository.getInstance().getConnection(), по сути тот же синглтон), паттерн «inversion of control» (public void setConnection, а setConnection уже вызывает кто-то другой, передавая тебе соединение, обычно вызывает библиотека).

Inversion of Control - самый разумный, вменяемые аргументы в пользу других вариантов я не знаю. Но встречаются.

логин и пароль могут храниться много где и это зависит от используемых библиотек. Можно хранить в context.xml (в настойках application server-а, можно хранить в собственном конфигурационном файле приложения). Особой разницы нет.

Legioner ★★★★★ ()

Как в серьезных приложениях принято обращаться к базе данных?

Уже ответили, через ORM, в случаях передельных оптимизаций - JDBC

Где хранить логин и пароль для сервера БД?

В настройках ресурса на серваке

ya-betmen ★★★★★ ()
Последнее исправление: ya-betmen (всего исправлений: 1)

погляди в сторону jOOQ

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