Spring JDBC与事务管理全解析
1. Spring JDBC 额外考量
在使用 Spring 的 JDBC 抽象框架成功实现基于 JDBC 的解决方案之前,有一些问题需要考虑。
1.1 性能
Spring 的 JdbcTemplate 及其回调方法的性能如何呢?与直接使用 JDBC 相比,在执行查询和常规更新时,没有发现值得注意的差异。这并不奇怪,因为对象创建、查询执行和序列化数据的传输占据了大部分处理时间,额外的几个回调不会对此产生太大影响,这也包括执行查询和更新的 RDBMS 操作类。
不过,批量更新会有轻微的性能损失。这是因为在整个批量操作中会创建并持有新对象,然后在批量刷新时一次性写入。这种方式虽然限制了数据库连接的打开时间,但会带来轻微的性能损失。不过,Spring JDBC 的批量更新在极端情况下(如每个事务进行一百万次更新)也能表现出出色的性能。
对于性能调优,还有一点需要注意:如果要检索大量行,可以更改 JDBC 驱动在需要更多行时从数据库获取的行数,这样可以减少与数据库的往返次数。示例代码如下:
JdbcTemplate jt = new JdbcTemplate(ds);
jt.setFetchSize(100);
但要注意不要将 fetchSize
设置得太高,否则可能会导致内存不足。
1.2 JDBC 与 O/R 映射的使用场景
在选择不同的数据访问技术时,有哪些因素需要考虑呢?假设数据库解决方案仅限于关系型数据库,