2010-07-26 2 views
2

Обычный совет заключается в закрытии ресурсов JDBC, когда они больше не нужны. Это можно сделать в уловке и, наконец. Однако, что, если метод DAO обрабатывает только один объект домена, а операция требует, чтобы некоторые из них были восстановлены/созданы за один раз? Будет ли получение заявления, а затем его закрытие неоднократно проблемой с точки зрения производительности? Если да, должен ли быть отдельный метод для обработки нескольких объектов за один проход или должен быть закрыт каким-либо образом?Методы Dao, управляющие одиночными/несколькими объектами и закрывающими ресурсами

ответ

1

Вы можете добавить дополнительный слой транзакций на вершине DAO слоя и вызвать setAutoCommit(false) на Connection в начале операции/сессии, пусть методы DAO использовать тот же Connection экземпляр, а затем commit()Connection, когда сделка/сеанс завершен/закрыт. Однако вам нужно будет изменить методы DAO, чтобы принять Connection в качестве дополнительного аргумента или сохранить его ThreadLocal (что, однако, необходимо сделать очень осторожно, поскольку потоки могут быть объединены).

Создание заявлений не должно быть таким дорогостоящим, пока вы последовательно используете PreparedStatement, которые обычно скомпилированы и кэшированы в стороне БД.

1

Я думаю, что было бы нецелесообразно, если приложение основано на Дао или нет. Эти ресурсы должны быть закрыты. Если вы работаете без каких-либо каркасов (весна, спящий режим и т. Д.)

java.sql.Связь должна быть возвращена в бассейн, если бы был пул. Объекты ResultSet и Statement должны быть закрыты после выполнения запроса.

В зависимости от вашей архитектуры эти коды управления ресурсами могут быть размещены в классах Dao или других классах. например, существуют классы, посвященные созданию и выполнению SQL-запросов. Коды ресурсов mgmt могут быть в этих классах.

Если вы работаете с некоторыми фреймворками, инфраструктура, как правило, будет использовать ресурс mgmt для вас.

Смежные вопросы