使用Spring JdbcTemplate进行多个数据库操作

时间:2010-04-01 22:42:21

标签: java spring jdbc spring-jdbc

我喜欢JdbcTemplate的明显简洁性,但是它有点混淆它的工作原理。似乎每个操作(query()或update())从数据源获取连接并关闭它。

很漂亮,但是如何在同一个连接中执行多个SQL查询?

我可能希望按顺序执行多个操作(例如SELECT后跟INSERT后跟提交)或者我可能想要执行嵌套查询(SELECT然后根据每行的结果执行第二个SELECT)。 / p>

如何使用JdbcTemplate执行此操作。我使用的是合适的班级吗?

2 个答案:

答案 0 :(得分:7)

  

如何执行多个SQL   在同一个连接中查询?

这里的正确答案是"use transactions"。如果您开始事务然后使用JdbcTemplate执行多个操作,则每个操作都将在事务范围内,因此保证使用相同的连接。

如果您不想参与交易,那么另一种方法是使用JdbcTemplate上更原始的操作,例如execute(ConnectionCallback action),您提供ConnectionCallback的实例给出Connection,然后您可以在其上执行您选择的任何操作。当然,但这样做不会在任何实际操作中得到JdbcTemplate的帮助。

在Spring中交易非常简单,你应该考虑使用它们(参见上面的链接)。

答案 1 :(得分:4)

我假设你想要交易?如果是这样,请查看Spring, JdbcTemplate and Transactions

另外,我建议你看一下Ibatis。 Spring JDBC似乎很方便,但它有一个主要问题:结果集到对象的默认映射使用Spring类,这在处理大型结果集时实际上非常慢。您可以通过为这些查询编写自己的行映射器来解决这个问题,但我个人并不想编写这种样板文件。

为了给你一个不同的例子:我使用基于Spring反射的行映射器进行一次查询需要50秒,使用手动编码的行映射器需要2秒。

此外,Spring JDBC使用内联SQL。在Java中,这是相当丑陋的,因为Java(令人讨厌)没有良好的多行字符串格式。