4.1 Spring JDBC
Spring的JDBC模块负责数据库资源管理和错误处理,大大简化了开发人员对数据库的操作,使得开发人员可以从烦琐的数据库操作中解脱出来,从而将更多的精力投入编写业务逻辑中。
4.1.1 Spring JdbcTemplate的解析
针对数据库的操作,Spring框架提供了JdbcTemplate类,该类是Spring框架数据抽象层的基础,其他更高层次的抽象类是构建于JdbcTemplate类之上的。可以说,JdbcTemplate类是Spring JDBC的核心类。
JdbcTemplate类的继承关系十分简单。它继承自抽象类JdbcAccessor,同时实现了JdbcOperations接口。
(1)JdbcOperations接口定义了在JdbcTemplate类中可以使用的操作集合,包括添加、修改、查询和删除等操作。
(2)JdbcTemplate类的直接父类是JdbcAccessor,该类为子类提供了一些访问数据库时使用的公共属性,具体如下。
- DataSource:其主要功能是获取数据库连接,具体实现时还可以引入对数据库连接的缓冲池和分布事务的支持,它可以作为访问数据库资源的标准接口。
- SQLExceptionTranslator:org.springframework.jdbc.support.SQLExceptionTranslator接口负责对SQLException进行转译工作。通过必要的设置或者获取SQLExceptionTranslator中的方法可以使JdbcTemplate在需要处理SQLException时委托SQLExceptionTranslator的实现类来完成相关的转译工作。
4.1.2 Spring JDBC的配置
Spring JDBC模块主要由4个包组成,分别是core(核心包)、dataSource(数据包)、object(对象包)和support(支持包)。关于这4个包的具体说明如表4.1所示。
表4.1 Spring JDBC中的主要包及说明
从表4.1可以看出,Spring对数据库的操作都封装在了这几个包中,如果想要使用Spring JDBC,就需要对其进行配置。在Spring中,JDBC的配置是在配置文件applicationContext.xml中完成的,其配置模板如下所示。
在上述代码中定义了3个Bean,分别是dataSource、jdbcTemplate和需要注入类的Bean。其中dataSource对应的org.springframework.jdbc.datasource.DriverManagerDataSource类用于对数据源进行配置,jdbcTemplate对应的org.springframework.jdbc.core.JdbcTemplate类中定义了JdbcTemplate的相关配置。上述代码中dataSource的配置就是JDBC连接数据库时所需的4个属性,如表4.2所示。
表4.2 dataSource的4个属性
表4.2中的4个属性需要根据数据库类型或者机器配置的不同设置相应的属性值。例如,如果数据库类型不同,就需要更改驱动名称;如果数据库不在本地,就需要将地址中的localhost替换成相应的主机IP;如果修改过MySQL数据库的端口号(默认为3306),就需要加上修改后的端口号,如果未修改,那么端口号可以省略;同时连接数据库的用户名和密码需要与数据库创建时设置的用户名和密码保持一致。本示例中Spring数据库的用户名和密码都是root。
定义jdbcTemplate时,需要将dataSource注入jdbcTemplate中,而其他需要使用jdbcTemplate的Bean,也需要将jdbcTemplate注入该Bean中(通常注入Dao类中,在Dao类中进行与数据库的相关操作)。