Spring JDBC and data Sources config
Outline:
- Spring DAO
- DataSource
- JDBC
ref: Spring In Action
Spring DAO
- 数据访问对象 (data access object)DAO == Repository
异常体系
- SQLException
- 发生异常时难以恢复
- 难确定异常类型
- 是一个check异常
- Hibernate异常
- 定义了许多具体异常
- 对业务对象的侵入
- Spring所提供的平台无关的持久化异常
- DataAccessException, 属于runtimeException,属于uncheck异常
- 具体异常,方便定位问题
- 隔离具体的数据库平台
模板方法模式
模板方法定义过程的主要框架,template
- 管理资源
- 事务控制
- 处理异常
变化的部分,回调(callback),自定义的数据访问代码
Spring提供的模板
- JdbcTemplate
- HibernateTemplate
- JpaTemplate
DataSource
配置数据源
四种方式:
使用JNDI数据源
(Java 命名与目录接口(Java Naming and Directory Interface) )
在Web容器中配置JNDI参数,定义一个数据源
Spring中配置JNDI数据源
1
2
3<jee:jndi-lookup id=“dataSource”
jndi-name=“/jdbc/**DS”
resource-ref=“true”/>
连接池的数据源
通过JDBC驱动程序定义数据源
- DriverManagerDataSource:注意没有进行池化处理
- SingleConnectionDataSource:只有一个连接的池
使用Spring配置嵌入式数据源
<jdbc:embedded-database>
- 可以创建数据表和初始化数据
- 用于开发和测试
以JDBC为例:
1 |
|
数据库配置文件
1 | // jdbc.properties: |
使用profile选择数据源
建立开发、测试、生产环境的不同数据源
配置文件+注解, 原理和SpringBoot一样, SpringBoot采用yml格式,比Spring的Profile简易很多,这里就不介绍Spring的了
JDBC
使用步骤
如上文所示
- 首先要创建并管理一个
DataSource
实例,表示数据库连接池; - 然后实例化一个
JdbcTemplate
来操作JDBC
JdbcTemplate
查询的内部实现:
- 从全局
DataSource
实例获取Connection
实例; - 通过
Connection
实例创建PreparedStatement
实例; - 执行SQL语句,如果是查询,则通过
ResultSet
读取结果集,如果是修改,则获得int
结果。
Spring JDBC框架
- JDBC模板:资源管理和异常处理
- JdbcTemplate
- NamedParameterJdbcTemplate