Spring对于JDBC操作来说是否过于复杂?

3

我刚刚在研究Spring JDBC框架,看起来需要一定的学习曲线。但是我仍然找不到一个好的、最新的、质量高的Spring/JDBC快速入门教程!

有没有比Spring更轻量级的基本JDBC操作框架,或者有没有好的教程链接可以分享呢?

非常感谢!


我建议修改您的标题。“Spring也适用于JDBC操作吗?”Spring也什么? - Kieran Senior
1
我尝试填补这个空缺,希望我猜对了;-) - Joachim Sauer
5个回答

17
恰恰相反,Spring中的JDBC支持非常简单。以下是一个基本示例:
dataSource = ... obtain data source... (e.g. via Spring config)
SimpleJdbcTemplate jdbcTemplate = new SimpleJdbcTemplate(dataSource);
Map<String, Object> row = jdbcTemplate.queryForMap(
        "SELECT * FROM MyTable WHERE ID=? LIMIT 1", 100);

JdbcTemplate和SimpleJdbcTemplate有很多查询方法,您可能会发现它们非常有用。如果要将行映射到您的对象,请查看RowMapper和ParameterizedRowMapper<T>。

对于数据源,通常希望使用一些具有池支持的高级DataSource。对于测试,可以使用简单的BasicDataSource:

BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("driverClassName");
ds.setUrl("jdbc://...");
ds.setUsername("username");
ds.setPassword("password");

+1. 这就是我最初接触Spring的方式。JDBCTemplate库使我的代码大幅缩减,因为我不再处于try catch finally地狱中。使用纯JDBC非常冗长乏味,到处都是检查异常。 - Julien Chastang
此外,SQLExceptions 可能甚至与 SQL 无关 - 抛出的 DataAccessException 更好地捕获了这一点。如果网络出现问题,你的 SQL 可能是完美无缺的,但是......SQLException! - MetroidFan2002
是啊,我喜欢DataAccessException层级结构。它更容易捕获特定的问题,不会受到特定于数据库的错误代码的困扰。 - Peter Štibraný

6
请查看http://static.springframework.org/spring/docs/2.5.x/reference/jdbc.html,选择一个风格(完全“自动化”的Spring vs.程序员完成大部分工作),并了解有关JdbcTemplate的基本操作。
该网站有很好的示例,例如:
int countOfActorsNamedJoe =
    this.jdbcTemplate.queryForInt(
        "select count(0) from t_actors where first_name = ?",
        new Object[]{"Joe"});

无论如何,你都需要花费一些时间。不管你使用哪个Spring JDBC教程,它都是基于Spring JDBC的。在这种情况下,从源头即Spring文档中学习并没有坏处,因为这些文档写得非常好。


4

2

Spring的文档非常好。

如果这不够帮助,像《Spring实战》等各种Spring书籍都非常好。

学习Spring是值得的 - 你可以摆脱很多样板式的JDBC代码。它非常擅长连接管理 - 加上DBCP一起使用会更好。


Spring的文档确实非常全面。但是解析起来并不是特别容易。它很快就会变得密密麻麻,对于新手来说有点难以理解。 - Brian Knoblauch

1

Spring JDBC在1.0版本中表现不错,但在2.5版本中进行了大量重构,使其变得更加简单。请查看JdbcTemplate和org.springframework.jdbc.core.simple包中的类。它们是Spring 2.5中的新功能,因此您在旧书中找不到它们。最好查看在线参考文档。


最好坚持使用2.5x版本还是转移到3版本? - Vidar
我自己还没有转移到3,所以我不能说。我不认为JDBC有太多新东西:http://www.devoxx.com/pages/viewpage.action?pageId=1704462 - duffymo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接