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

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

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

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

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

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

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

如果您不想涉及事务,那么另一种方法是在JdbcTemplate上使用更原始的操作,比如execute(ConnectionCallback action) ,在这里你提供一个ConnectionCallback的实例,它给了一个Connection ,然后你就可以了执行您选择的任何操作。 当然,但这样做你不会在任何实际操作中得到JdbcTemplate的帮助。

Spring中的事务非常简单,您应该考虑使用它们(参见上面的链接)。

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

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

为了给你一个不同的例子:我用一个基于Springreflection的行映射器用一个手动编码的行映射器花了2秒钟,用一个查询花了50秒。

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