Дао методы, манипулирование единым / несколькими объектами и закрытие ресурсов - PullRequest
2 голосов
/ 26 июля 2010

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

Ответы [ 2 ]

1 голос
/ 26 июля 2010

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

1 голос
/ 26 июля 2010

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

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

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

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

...