
5.1 Spring的数据库编程
数据库编程是互联网编程的基础,Spring框架为开发者提供了JDBC模板模式,即jdbcTemplate,它可以简化许多代码,但在实际应用中jdbcTemplate并不常用,在工作中更多的时候是使用Hibernate框架和MyBatis框架进行数据库编程。
本节仅简要介绍Spring jdbcTemplate的使用方法,对于MyBatis框架的相关内容将在本书后续章节中详细介绍。对于Hibernate框架,本书不再涉及,需要的读者可以查阅Hibernate框架的相关知识。
5.1.1 Spring JDBC的配置
本节Spring数据库编程主要使用Spring JDBC模块的core和dataSource包。core包是JDBC的核心功能包,包括常用的JdbcTemplate类;dataSource包是访问数据源的工具类包。如果要使用Spring JDBC操作数据库,需要对其进行配置,配置文件的示例代码如下:

在上述示例代码中,配置JDBC模板时需要将dataSource注入到jdbcTemplate,而在数据访问层(Dao类)需要使用jdbcTemplate时也需要将jdbcTemplate注入到对应的Bean中。示例代码如下:

5.1.2 Spring JdbcTemplate的常用方法
在5.1.1节中获取了JDBC模板,那么如何使用它?这是本节将要讲述的内容。首先需要了解JdbcTemplate类的常用方法,该类的常用方法是update和query。
• public int update(String sql, Object args[]):该方法可以对数据表进行增加、修改、删除等操作。使用args[]设置SQL语句中的参数,并返回更新的行数。示例代码如下:

• public List<T> query(String sql, RowMapper<T> rowMapper, Object args[]):该方法可以对数据表进行查询操作。rowMapper将结果集映射到用户自定义的类中(前提是自定义类中的属性要与数据表的字段对应)。示例代码如下:

下面通过一个实例演示Spring JDBC的使用过程,具体步骤如下:
① 创建应用并导入JAR包
创建一个名为ch5的Web应用,将Spring框架的5个基础JAR包、MySQL数据库的驱动JAR包、Spring JDBC的JAR包以及Spring事务处理的JAR包复制到应用的/WEB-INF/lib目录下。ch5应用所添加的JAR包如图5.1所示。

图5.1 ch5应用所添加的JAR包
② 创建并编辑配置文件
在src目录下创建配置文件applicationContext.xml,在该文件中配置数据源和JDBC模板,具体代码如下:

③ 创建实体类
在src目录下创建com.ch5包,在该包中创建实体类MyUser。注意,该类的属性与数据表user的字段一致。数据表user的结构如图5.2所示。

图5.2 user表的结构
实体类MyUser的代码如下:

④ 创建数据访问层Dao
在com.ch5包中创建TestDao接口和TestDaoImpl实现类。在实现类TestDaoImpl中使用JDBC模块JdbcTemplate访问数据库,并将该类注解为@Repository("testDao")。使注解生效,需要在配置文件中扫描(见第2个步骤)。
TestDao接口的代码如下:

TestDaoImpl实现类的代码如下:

⑤ 创建测试类
在com.ch5包中创建测试类TestSpringJDBC。在主方法中调用数据访问层Dao中的方法,对数据表user进行操作。具体代码如下:

运行上述测试类,运行结果如图5.3所示。

图5.3 Spring数据库编程的运行结果