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()
。