Эффективная стратегия Java для доступа к БД - PullRequest
5 голосов
/ 08 апреля 2010

Простой вопрос: что является более эффективным способом доступа к БД в Java / JDBC? Я веб-разработчик, и я хотел бы написать код, который можно использовать повторно и масштабировать.
Что меня интересует, так это использование таких инструментов, как ResultSupport: слишком ли это сложно с точки зрения использования ресурсов?
Что вы можете предложить?

Ответы [ 6 ]

5 голосов
/ 08 апреля 2010

Не только для JDBC, но и для общего SQL

  1. Если вам нужно повторно выполнить запрос несколько раз, используйте PreparedStatement. Используйте хранимую процедуру, если она доступна. Это, очевидно, не переносимо, поэтому YMMV.

  2. Всегда закрывайте свой ResultSet или Statement, если вы его не используете. Закрытие выписки автоматически закроет все ResultSet, связанные с выпиской. Тем не менее, это хорошая привычка закрывать ResultSet.

  3. Попробуйте ограничить то, что может быть запрошено, например. выберите * из заказов, где order_date между XXX и yyy. В MySQL запросом может быть либо полное сканирование таблицы, либо «диапазон» в зависимости от того, сколько данных возвращается. Итак, решив, насколько «гибкими» вы хотите, чтобы ваши запросы были

  4. Если вы используете MySQL, используйте объяснение для оптимизации вашего запроса. Если вы используете JPA, вы не увидите сгенерированный SQL. (Это не совсем JDBC). Возможно, вы захотите включить ведение журнала в диспетчере ORM для отображения используемого оператора SQL. Затем используйте объяснение, чтобы оптимизировать это. Возможно, вы захотите использовать @NamedNativeQuery, если ORM генерирует действительно запутанный запрос

  5. Если ваш драйвер JDBC поддерживает пакетное обновление, используйте его. Пакетные обновления поддерживаются в PreparedStatement и ResultSet.

  6. Вы также можете контролировать коммит. Хорошая идея, чтобы отключить его, если вы выполняете много обновлений. Вызов совершить () самостоятельно.

1 голос
/ 08 апреля 2010

Лучший ответ на этот простой вопрос: «это зависит».

Существует множество API, которые вы можете использовать для доступа к базе данных. Почти все они будут использовать JDBC API в качестве средства связи с базой данных. Так что в теории ничто не может сравниться с необработанным JDBC низкого уровня (точно так же, как машинный код в теории всегда быстрее, чем языки программирования более высокого уровня).

Но так как вы также любите писать многократно используемый код, я предлагаю вам взглянуть на JPA . Это стандарт Java для сохранения объектов в реляционных базах данных. Его производительность довольно хорошая и очень портативная.

Поскольку JPA является лишь спецификацией, вы можете выбрать собственную реализацию: Hibernate , OpenJPA или любой совместимый сервер Java EE.

0 голосов
/ 08 апреля 2010

Используйте пул соединений (либо из вашего контейнера, либо из отдельного пула соединений, например c3p0 или DBCP ) и что-то вроде DBUtils или Spring's JdbcTemplate .

0 голосов
/ 08 апреля 2010

Существует проект, который отображает объекты Java в базы данных MySQL. Azirt.

0 голосов
/ 08 апреля 2010

Очень важно использовать всегда источник данных пула соединений, такой как c3p0 .

0 голосов
/ 08 апреля 2010

Я думаю, что самый простой и распространенный способ - использовать Spring и их JDBCTemplate .

Лучший подход, вероятно, зависит от стека, который вы используете для создания веб-приложения. Если вы начинаете с нуля, то Spring - хороший путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...