Pergunta

Gosto da aparente simplicidade do JDBCTemplate, mas estou um pouco confuso sobre como funciona. Parece que cada operação (query () ou atualização ()) busca uma conexão de uma fonte de dados e a fecha.

Linda, mas como você realiza várias consultas SQL na mesma conexão?

Posso querer executar várias operações em sequência (por exemplo, selecione seguido por uma inserção seguida por um compromisso) ou posso querer executar consultas aninhadas (selecione e execute uma segunda seleção com base no resultado de cada linha).

Como faço isso com o JDBCTemplate. Estou usando a classe certa?

Foi útil?

Solução

Como você executa várias consultas SQL na mesma conexão?

A resposta correta aqui é "Use transações". Se você iniciar a transação e executar várias operações com JdbcTemplate, cada uma dessas operações estará dentro do escopo da transação e, portanto, é garantida que use a mesma conexão.

Se você não quer se envolver com transações, a alternativa é usar as operações mais primitivas em JdbcTemplate, Curti execute(ConnectionCallback action), onde você fornece uma instância de ConnectionCallback que é dado um Connection, em que você pode executar todas as operações escolhidas. Claro, mas fazendo isso, você não consegue JdbcTemplateAjuda em qualquer uma das operações reais.

As transações são realmente muito fáceis na primavera, você deve usar (veja o link acima).

Outras dicas

Presumo que você queira transações? Se sim, dê uma olhada em Primavera, jdbctemplate e transações.

Em uma nota lateral, eu sugiro que você dê uma olhada Ibatis. O Spring JDBC parece conveniente, mas tem um problema importante: o mapeamento padrão dos conjuntos de resultados para objetos usa classes de mola, que é realmente muito lento ao lidar com grandes conjuntos de resultados. Você pode contornar isso escrevendo seus próprios mapeadores de linha para essas consultas, mas pessoalmente não quero escrever esse tipo de caldeira.

Para dar um exemplo da diferença: tive uma consulta levando 50 segundos com o mapeador de linha baseado em reflexão da mola que levou 2 segundos com um mapeador de linha codificado por mão.

Além disso, o Spring JDBC usa SQL embutido. Em Java, isso é bastante feio, pois o Java (irritantemente) não tem um bom formato de string multi-line.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top