本文对《Spring实战》第十章重点进行摘要
数据访问哲学
最佳实践是将数据访问的功能放到一个或多个专注于此任务的组件中。这样的组件通常称为数据访问对象(data access object,DAO)或Repository。
为了避免应用于特定的数据访问策略耦合在一起,编写良好的Repository应该以接口的方式暴露功能。
以Spittr为例:
实体类(属性、setter、getter):Spitter、Spittle
接口(定义操作CRUD):SpitterRepository、SpittleRepository
实现:JdbcSpitterRepository、JdbcSpittleRepository
配置数据源
Spring提供了在Spring上下文中配置数据源bean的多种方式,包括:
- 通过JDBC驱动程序定义的数据源
- 通过JDNI查找的数据源
- 连接池的数据源
因为项目较小,主要关注通过JDBC驱动程序定义的数据源,这也是最简单的配置方式
基于JDBC驱动的数据源
Spring提供了三个这样的数据源类(均位于org.springframework.jdbc.datasource包中)
- DriverManagerDataSource
- SimpleDriverDataSource
- SingleConnectionDataSource
三者的区别详见《Spring实战》一书
如下就是配置DriverManagerDataSource的方法
@Bean
public DataSource dataSource() {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/spittr");
ds.setUsername("xxx");
ds.setPassword("xxx");
return ds;
}
使用JDBC模板
Spring为JDBC提供了三个模板类供选择
- JdbcTemplate
- NamedParameterJdbcTemplate
- SimpleJdbcTemplate
从Spring3.1开始,SimpleJdbcTemplate 已经被废弃了,只有在需要使用命名参数的时候,才需要使用NamedParameterJdbcTemplate。这样,对于JDBC任务来说,JdbcTemplate 就是最好的选择方案。
配置JdbcTemplate
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
DataSource是通过构造器参数注入进来的,这里的 dataSource 可以是javax.sql.DataSource的任意实现,包括上文提到的。
将JdbcTemplate装配到Repository
@Bean
public SpitterRepository spitterRepository(JdbcTemplate jdbcTemplate) {
return new JdbcSpitterRepository(jdbcTemplate);
}
配置事务管理器
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}