Spring对JDBC进行了良好的封装,通过提供相应的模板和辅助类,在相当程度上降低
了JDBC操作的复杂性。并且得益于Spring良好的隔离设计,JDBC封装类库可以脱离
Spring Context独立使用,也就是说,即使系统并没有采用Spring作为结构性框架,我们
也可以单独使用Spring的JDBC部分(spring-dao.jar)来改善我们的代码。
作为对比,首先让我们来看一段传统的JDBC代码:
Connection conn =null;
Statement stmt = null;
try {
conn = dataSource.getConnection();
stmt = con.createStatement();
stmt.executeUpdate("UPDATE user SET age = 18 WHERE id = 'erica'");
} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException ex) {
logger.warn("Exception in closing JDBC Statement", ex);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
logger.warn("Exception in closing JDBC Connection", ex);
}
}
}
类似上面的代码非常常见。为了执行一个SQL语句,我们必须编写22行代码,而其中
21行与应用逻辑并无关联,并且,这样的代码还会在系统其他地方(也许是每个需要数据
库访问的地方)重复出现。
于是,大家开始寻找一些设计模式以改进如此的设计,Template模式的应用是其中一
种典型的改进方案。
Spring的JDBC封装,很大一部分就是借助Template模式实现,它提供了一个优秀的
JDBC模板库,借助这个工具,我们可以简单有效的对传统的JDBC编码方式加以改进。
下面是借助Spring JDBC Template修改过的代码,这段代码完成了与上面代码相同
的功能。
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update("UPDATE user SET age = 10 WHERE id = 'erica'");
SpringFrameWork Developer’s Guide Version 0.6
October 8, 2004 So many open source projects.Why not Open your Documents?
可以看到,两行代码完成了上面需要19行代码实现的功能。所有冗余的代码都通过合理
的抽象汇集到了JdbcTemplate中。
无需感叹,借助Template模式,我们大致也能实现这样一个模板,不过,Spring的设计
者已经提前完成了这一步骤。org.springframework.jdbc.core.JdbcTemplate中包含了
这个模板实现的代码,经过Spring设计小组精心设计,这个实现可以算的上是模板应用的
典范。特别是回调(CallBack)的使用,使得整个模板结构清晰高效。值得一读。
Tips:实际开发中,可以将代码中硬编码的SQL语句作为Bean的一个String类型属性,借
助DI机制在配置文件中定义,从而实现SQL的参数化配置。
再对上面的例子进行一些改进,通过PrepareStatement执行update操作以避免SQL
Injection 漏洞9:
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate
.update(
"UPDATE user SET age = ? WHERE id = ?",
new PreparedStatementSetter() {
public void setValues(PreparedStatementSetter ps)
throws SQLException {
ps.setInt(1, 18);
ps.setString(2, "erica");
}
}
);
可以看到,上面引用了update方法的另一个版本,传入的参数有两个,第一个用于创建
PreparedStatement的SQL。第二个参数是为PreparedStatement设定参数的
PreparedStatementSetter。
第二个参数的使用方法比较独到,我们动态新建了一个PreparedStatementSetter类,
并实现了这个抽象类的setValues方法。之后将这个类的引用作为参数传递给update。
update接受参数之后,即可调用第二个参数提供的方法完成PreparedStatement的初始
化。
Spring JDBC Template中大量使用了这样的Callback机制,这带来了极强的灵活性和
扩展性。
上面演示了update方法的使用(同样的操作适用于update、insert、delete)。下面是
一个查询的示例。
final List userList = new ArrayList();
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate
.query(
"SELECT name, sex, address FROM user WHERE age > 18",
new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
User user = new User();
user.setId(rs.getString("name"));
user.setSex(rs.getString("sex"));
user.setAddress(rs.getString("address"));
userList.add(product);
}
}
);
这里传入query方法的有两个参数,第一个是Select查询语句,第二个是一个
RowCallbackHandler实例,我们通过RowCallbackHandler对Select语句得到的每行记
录进行解析,并为其创建一个User数据对象。实现了手动的OR映射。
此外,我们还可以通过JdbcTemplate.call方法调用存储过程。
query、update方法还有其他很多不同参数版本的实现,具体调用方法请参见Spring
JavaDoc。
分享到:
相关推荐
**基于注解的Spring JdbcTemplate** 在Java世界中,Spring框架是企业级应用开发的首选。Spring JDBC模絫提供了一种简洁的方式来处理数据库操作,而`Spring JdbcTemplate`是这个模絫的核心组件。本教程将深入探讨...
**Spring JdbcTemplate**是Spring框架中的一个核心组件,主要用于简化Java数据库访问。它提供了一种模板化的方式来执行SQL语句,使得开发人员可以避免编写大量的重复代码,专注于业务逻辑,而不是底层的数据库交互...
使用 Spring JdbcTemplate 调用 Oracle 存储过程实现 CRUD 在本文中,我们将讨论如何使用 Spring JdbcTemplate 调用 Oracle 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储...
Spring的JdbcTemplate是Spring框架中用于简化数据库操作的工具类,它是基于JDBC但又抽象出了一层,避免了直接与数据库驱动API交互,从而提高了代码的可读性和可维护性。本文将深入探讨Spring JdbcTemplate的常用方法...
首先,我们要理解Spring JDBCTemplate的工作原理。它作为一个模板类,提供了执行SQL语句的方法,如`update()`, `query()`, `insert()`, `delete()`等。开发者只需要提供SQL语句和参数绑定,JDBCTemplate会自动处理...
SpringJdbcTemplate是Spring框架中用于简化Java数据库访问的工具,它是Spring JDBC模块的核心。这个封装工具类的出现是为了提供一种更简洁、易于使用的接口来执行SQL操作,减轻开发者处理数据库连接、事务管理以及...
《深入解析Spring JdbcTemplate》 Spring JDBC Template是Spring框架中用于简化JDBC操作的一个核心组件,它是Spring对JDBC API的封装,旨在提供一个更加简洁、健壮且可测试的数据库访问层。在这个实例工程中,我们...
在Spring框架中,JdbcTemplate是用于简化数据库操作的重要工具,它是Spring JDBC模块的一部分。通过使用JdbcTemplate,开发者可以避免编写大量的重复代码,如手动管理连接、处理结果集等,从而专注于业务逻辑。本文...
在Spring框架中,`JdbcTemplate`是用于简化Java数据库连接(JDBC)操作的一个核心组件。这个类提供了很多方法来执行SQL查询、更新语句,包括批处理操作。本篇文章将详细探讨`batchUpdate`方法及其在实际开发中的应用...
Struts2、Spring和Spring JDBC Template是Java Web开发中常用的三个框架,它们分别负责不同的职责。Struts2作为MVC(Model-View-Controller)框架,主要处理前端请求和业务逻辑;Spring则是一个全面的后端框架,提供...
Spring JdbcTemplate是Spring框架中用于简化数据库操作的一个重要组件,它是Spring对JDBC的轻量级封装,旨在提供一种结构良好、易于使用的SQL执行机制,同时保持了JDBC的灵活性。在本实例中,我们将深入探讨Spring ...
Spring JdbcTemplate是Spring框架中的一个核心组件,主要用来简化数据库操作。它提供了一种模板方法设计模式,将SQL语句的执行与结果处理进行了抽象,使得开发者可以更加专注于业务逻辑,而无需关心底层数据访问的...
模仿spring jdbcTemplate的粗略实现,只有很小的参考价值,如果是java初学者可以使用这个封装好的工具进行数据库操作,只需要在db.properties里配置好driver,url等信息
根据给定的文件信息,以下是对“Spring JdbcTemplate API”的详细知识点解析: ### Spring JdbcTemplate API:数据库操作的模板模式 #### 概述 在Spring框架中,`JdbcTemplate`是一个用于简化JDBC编程的工具类,...
《Spring JdbcTemplate 深入解析与实战应用》 在Java世界中,Spring框架以其强大的功能和灵活性,深受广大开发者的喜爱。其中,Spring JDBC Template是Spring提供的一个用于简化数据库操作的工具,它抽象了JDBC API...
在Java Web开发中,Spring框架提供了丰富的工具来简化数据库操作,其中之一就是`Spring JdbcTemplate`。`JdbcTemplate`是Spring对JDBC(Java Database Connectivity)的一层轻量级封装,它使得开发者能够更加方便地...
SSH笔记-Spring JdbcTemplate是关于如何在Spring框架中利用JdbcTemplate进行数据库操作的教程。Spring是一个广泛应用的Java企业级应用框架,它提供了多种数据访问工具,而JdbcTemplate就是其中之一,用于简化JDBC...
1.Spring4前 spring-jdbc包是独立的,4以后spring-jdbc 就已经没有了
Spring JDBCTemplate是Spring框架中的一个核心组件,它提供了一种简化数据库操作的抽象层,使得开发者可以更加方便、高效地处理数据库事务。本篇将深入探讨Spring JDBCTemplate的使用及其源码解析,帮助你理解其背后...