JdbcTemplate的使用
虽说 JdbcTemplate 使用的情况不多,但是 Spring 在 JDBC 上对数据库做了封装,将 dataSource 注入 JdbcTemplate,使用更加方便。
JdbcTemplate实例
在这里需要引入 spring-boot-starter-jdbc 的依赖,在6.1节中已经讲过类似的,这里不再重复。新建数据表 t_user,SQL 语句如下所示。
CREATE TABLE t_user(
ID INT(16) NOT NULL AUTO_INCREMENT COMMENT 'ID',
USERNAME VARCHAR(32) NOT NULL COMMENT '姓名',
PASSWORD VARCHAR(32) NOT NULL COMMENT '密码',
PRIMARY KEY (ID)
)ENGINE=InnoDB DEFAULT CHARSET=UTF8 COMMENT='用户表';
对应的实体类代码如下所示。
package com.springBoot.dataSource.pojo;
public class User {
private int id;
private String username;
private String password;
//set and get
}
单次更新测试类代码
package com.springBoot.dataSource.test;
@SpringBootApplication
@SpringBootTest
//@PropertySource(value = "classpath:application.properties",ignore ResourceNotFound = true)
@RunWith(SpringRunner.class)
public class ShowDataSource {
@Autowired
JdbcTemplate jdbcTemplate;
@Test
public void testJdbcTemplate() throws SQLException {
DataSource dataSource=applicationContext.getBean(DataSource. class);
jdbcTemplate=new JdbcTemplate(dataSource);
String sql="insert into t_user values(1,?,?)";
jdbcTemplate.update(sql,"tom","123");
}
}
上面的代码只是一个更新的实例,更多的方法没有展示,这里只是为了说明如何使用 JdbcTemplate。在上面的代码中,我们使用 Spring 的注入功能,将 dataSource 注册到 JdbcTemplate,然后可以使用 JdbcTemplate 的方法。在这里不需要考虑连接信息,只需要写 SQL 语句与传递 SQL 参数即可,最终效果如图6.2所示。

批量处理
在 JdbcTemplate 中,每次运行 SQL 程序都会新建立一次数据库连接。建立连接比较浪费资源。有时面对同一种逻辑,我们希望在一次连接过程中执行多条 SQL,其实这也是支持的。下面是一个实例。
@Test
public void testBatchUpdate() throws SQLException {
DataSource dataSource=applicationContext.getBean(DataSource. class);
jdbcTemplate=new JdbcTemplate(dataSource);
String sql="insert into t_user values(?,?,?)";
List<Object[]> list=new ArrayList<>();
list.add(new Object[]{2,"B","234"});
list.add(new Object[]{3,"C","345"});
list.add(new Object[]{4,"D","456"});
jdbcTemplate.batchUpdate(sql,list);
}
最终,通过数据库,可以查看效果,如图6.3所示。

JdbcTemplate原理说明
JdbcTemplate 提供了五类方法,其方法与说明如表6.1所示。

对于这五类方法,可以参考上文的实例进行使用。在上文的示例中可以看到,重要的是对 SQL 的书写,然后调用 API。
讲到这里,读者应该对 JdbcTemplate 有了基本的了解。在程序中,我们可以写自己的业务逻辑,但为了更好地拓展应用,还需了解一些底层的基本原理,加深对 JdbcTemplate 的理解。
首先,JdbcTemplate 是一个模板方法。JDBC 是比较原始的操作数据库方式,可以满足用户的基本需求,但在使用时需要自己管理,程序比较冗余。Spring 对此进行封装,构建抽象层,在抽象层提供了许多使用 JDBC 的模板与驱动模块。
然后,我们来看 JdbcTemplate 的继承关系,如图6.4所示。

从图中可以看到 JdbcTemplate 继承了 JdbcAccessor 和实现接口 JdbcOperations。进入 JdbcAccessor 类中,可以看到在这个基类中,主要有以下几个方法,如图6.5所示。

从图中可以看到,这里主要是对 DataSource 进行配置与管理。再让我们看看 JdbcOperations 接口。在这个接口中,更多的是方法的重载,用于定义通过 JDBC 操作数据库的基本方法。
最后,通过继承基类与实现接口,Jdbc Template 完成对 JDBC 的封装,这种做法不仅提高了数据库开发的效率,而且为应用开发提供了灵活性。