Spring提供了JDBC模板,代替了JDBC繁琐操作。使用Spring JDBC模板我们不再需要手动去关闭连接,抛出的异常也更为明确。
准备工作
数据库创建表:
| 1 | create table userinfo ( | 
创建序列:
| 1 | create sequence user_seq start with 1 increment by 1; | 
配置数据源连接池
新建一个数据库配置文件db.properties:
| 1 | username=oracle | 
在Spring配置文件读取db.properties
| 1 | <util:properties id="db" location="classpath:db.properties" /> | 
配置连接池:
| 1 | <bean id="dataSource" | 
除了上述配置属性,下表列出了BasicDataSource的一些常用属性:
| 池配置属性 | 所指定的内容 | 
|---|---|
| initialSize | 池启动时创建的连接数量 | 
| maxActive | 同一时间可以从池中分配的最多连接数,如果设置为0,表示无限制 | 
| maxIdle | 池里不会被释放的最多空闲连接数。如果设置为0,表示无限制 | 
| maxOpenPreparedStatements | 在同一时间能够从语句池中分配的预处理语句的最大数量。如果设置 为0,表示无限制 | 
| maxWait | 在抛出异常之前,池等待连接回收的最大时间 (当没有可用连接时)。 如果设置为-1,表示无限等待 | 
| minEvictableIdleTimeMillis | 连接在池中保持空闲而不被回收的最大时间 | 
| minIdle | 在不创建新连接的情况下,池中保持空闲的最小连接数 | 
| poolPreparedStatements | 是否对预处理语句进行池管理(布尔类型) | 
使用JdbcTemplate
在Spring配置文件中配置JdbcTemplate:
| 1 | <bean id="jdbcTemplate" | 
新建一个User类,用于存储查询结果:
| 1 | public class User { | 
新建UserDao interface,定义基本的增删改查方法:
| 1 | public interface UserDao { | 
新建UserDao实现类UserDaoImpl:
| 1 | // DAO注解 | 
增加用户
实现addUser()方法:
| 1 | private static final String SQL_INSERT_USER | 
上述SQL使用了索引参数,这使得我们不得不严格按照参数的顺序来定义参数。SimpleJdbcTemplate支持使用命名参数的SQL。修改addUser()方法:
| 1 | private static final String SQL_INSERT_USER | 
现在,参数的顺序已经不重要了,只要参数名称对应上就行。
测试:
| 1 | public class TestJdbc { | 
查询数据库:
| 1 | SQL> select * from lzp.userinfo where name='SCOTT'; | 
删除用户
实现deleteUser()方法:
| 1 | private static final String SQL_DELETE_USER = | 
测试:
| 1 | public class TestJdbc { | 
查询数据库,SCOTT已被删除:
| 1 | SQL> select * from lzp.userinfo; | 
查询单个用户
实现selectUser()方法:
| 1 | private static final String SQL_SELECT_USER = | 
测试:
| 1 | public class TestJdbc { | 
查询所有用户
实现selectAll()方法:
| 1 | private static final String SQL_SELECT_All_USER = "select * from userinfo"; | 
测试:
| 1 | public class TestJdbc { | 
输出:
| 1 | JANE | 
修改用户
实现updateUser()方法:
| 1 | private static final String SQL_UPDATE_USER = | 
测试:
| 1 | public class TestJdbc { | 
查询数据库,可发现值已被修改:
| 1 | SQL> select * from lzp.userinfo; | 
Spring JDBC DAO支持类
除了向DAO中注入simpleJdbcTemplate外,我们还可以通过继承Spring提供的SimpleJdbcDaoSupport类:
| 1 | public class UserDaoImpl extends SimpleJdbcDaoSupport implements UserDao { | 
获取simpleJdbcTemplate对象可通过静态方法:getSimpleJdbcTemplate()。

