我喜欢 JdbcTemplate 明显的简单性,但对它的工作原理有点困惑。似乎每个操作(query() 或 update())都从数据源获取连接并关闭它。
很漂亮,但是如何在同一个连接中执行多个 SQL 查询?
我可能想按顺序执行多个操作(例如 SELECT 后跟 INSERT 后跟 commit),或者我可能想执行嵌套查询(SELECT 然后根据每行的结果执行第二个 SELECT)。
我如何使用 JdbcTemplate 做到这一点。我使用正确的课程吗?
我喜欢 JdbcTemplate 明显的简单性,但对它的工作原理有点困惑。似乎每个操作(query() 或 update())都从数据源获取连接并关闭它。
很漂亮,但是如何在同一个连接中执行多个 SQL 查询?
我可能想按顺序执行多个操作(例如 SELECT 后跟 INSERT 后跟 commit),或者我可能想执行嵌套查询(SELECT 然后根据每行的结果执行第二个 SELECT)。
我如何使用 JdbcTemplate 做到这一点。我使用正确的课程吗?
如何在同一个连接中执行多个 SQL 查询?
这里的正确答案是“使用事务”。如果您开始事务,然后使用 执行多个操作JdbcTemplate
,则这些操作中的每一个都将在事务的范围内,因此保证使用相同的连接。
如果您不想参与事务,那么另一种方法是在 上使用更原始的操作JdbcTemplate
,例如execute(ConnectionCallback action)
,您提供一个实例,ConnectionCallback
其中给出了 a Connection
,然后您可以在该实例上执行您选择的任何操作。当然,但是这样做你JdbcTemplate
在任何实际操作中都得不到帮助。
事务在 Spring 中非常简单,您应该考虑使用它们(参见上面的链接)。
我假设你想要交易?如果是这样,请查看Spring、JdbcTemplate 和 Transactions。
顺便说一句,我建议你看看Ibatis。Spring JDBC 看起来很方便,但它有一个主要问题:结果集到对象的默认映射使用 Spring 类,在处理大型结果集时实际上非常慢。您可以通过为这些查询编写自己的行映射器来解决这个问题,但我个人不想编写这种样板文件。
举一个不同的例子:我有一个使用基于 Spring 反射的行映射器的查询需要 50 秒,而使用手动编码的行映射器需要 2 秒。
此外,Spring JDBC 使用内联 SQL。在 Java 中,这相当难看,因为 Java(令人讨厌)没有良好的多行字符串格式。