использование Spring JdbcTemplate для нескольких операций с базой данных - PullRequest
4 голосов
/ 02 апреля 2010

Мне нравится кажущаяся простота JdbcTemplate, но я немного смущен тем, как он работает. Похоже, что каждая операция (query () или update ()) выбирает соединение из источника данных и закрывает его.

Прекрасно, но как вы выполняете несколько SQL-запросов в одном соединении?

Я мог бы хотеть выполнить несколько операций последовательно (например, SELECT, за которым следует INSERT, а затем зафиксировать), или я мог бы захотеть выполнить вложенные запросы (SELECT, а затем выполнить второй SELECT на основе результата каждой строки).

Как мне это сделать с помощью JdbcTemplate. Я использую правильный класс?

Ответы [ 2 ]

7 голосов
/ 02 апреля 2010

как вы выполняете несколько SQL запросы внутри одного и того же соединения?

Правильный ответ здесь: «использовать транзакции» . Если вы начинаете транзакцию, а затем выполняете несколько операций с JdbcTemplate, каждая из этих операций будет в рамках транзакции, и, следовательно, гарантированно будет использовать одно и то же соединение.

Если вы не хотите связываться с транзакциями, альтернативой является использование более примитивных операций на JdbcTemplate, таких как execute(ConnectionCallback action), где вы предоставляете экземпляр ConnectionCallback, которому присваивается Connection, на котором вы можете выполнять любые операции по вашему выбору. Конечно, но при этом вы не получите помощи JdbcTemplate ни в одной из реальных операций.

Транзакции в Spring довольно просты, вы должны изучить их (см. Ссылку выше).

4 голосов
/ 02 апреля 2010

Я полагаю, вы хотите транзакции? Если это так, взгляните на Spring, JdbcTemplate и транзакции .

Кстати, я бы посоветовал вам взглянуть на Ibatis . Spring JDBC кажется удобным, но у него есть одна главная проблема: при сопоставлении наборов результатов с объектами по умолчанию используются классы Spring, что на самом деле очень медленно при работе с большими наборами результатов. Вы можете обойти это, написав свои собственные мэпперы для этих запросов, но лично я не хочу писать такой пример.

Чтобы дать вам пример различия: один запрос занял 50 секунд с помощью средства отображения строк на основе отражения Spring, которое заняло 2 секунды с помощью средства отображения строк с ручным кодированием.

Кроме того, Spring JDBC использует встроенный SQL. В Java это довольно уродливо, поскольку Java (досадно) не имеет хорошего многострочного формата String.

...