Spring JDBC简介
先来看看一个JDBC的例子。我们可以看到为了执行一条SQL语句,我们需要创建连接,创建语句对象,然后执行SQL,然后操纵结果集获取数据。
try(Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD)){
List<User> users = new ArrayList<>();
try (Statement statement = connection.createStatement()) {
try (ResultSet rs = statement.executeQuery("SELECT *FROM user")) {
while (rs.next()) {
User user = new User();
user.setId(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
user.setNickname(rs.getString(4));
user.setBirthday(rs.getDate(5));
users.add(user);
}
}
}
}
其实这些步骤中有很多步骤都是固定的,Spring JDBC框架将这些操作封装起来, 我们只需要关注业务逻辑点即可。在Spring JDBC框架中,我们要做的事情如下:
- 定义连接字符串参数。
- 指定SQL语句。
- 声明参数和参数类型。
- 每次迭代结果集的操作。
Spring会帮我们完成以下事情:
- 打开连接。
- 准备和执行SQL语句。
- 在需要的情况下迭代结果集。
- 处理异常。
- 操作事务。
- 关闭结果集、语句和数据库连接。
使用JdbcTemplate
JdbcTemplate是Jdbc框架最重要的类,提供了较为底层的Jdbc操作。其它几个类都是在JdbcTemplate基础上封装了相关功能。
添加依赖
要在Gradle项目中使用Spring JDBC框架,添加如下一段。由于Spring JDBC的主要类JdbcTemlate需要一个数据源用来初始化,所以还需要一个数据源的实现。
compile group: 'org.springframework', name: 'spring-jdbc', version: '4.3.5.RELEASE'
compile group: 'org.apache.commons', name: 'commons-dbcp2', version: '2.1.1'
如果要使用Spring框架的其他功能,可能还需要添加对应的依赖。
创建Jdbc Template Bean
首先需要创建一个数据源Bean。为了将配置分离,我们先新建一个jdbc.properties
文件。
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=12345678
然后创建一个Spring配置文件jdbc.xml
。这里用到了<context:property-placeholder>
节点来导入其它配置文件。然后用这些属性创建一个数据源Bean,然后再利用数据源Bean来创建一个JdbcTemplate。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
<context:property-placeholder location="jdbc.properties"/>
</beans>
JdbcTemplate操作
注册了JdbcTemplate之后,就可以将它注入到任何地方来使用了。首先它可以使用execute方法,执行任何SQL语句。这里创建了一个简单的MySQL用户表,只有主键和用户名。
jdbcTemplate.execute("CREATE TABLE user(id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) UNIQUE)");
它还可以使用update方法执行增加、更新和删除操作。
jdbcTemplate.update(