Spring(八)JdbcTemplate

一、JdbcTemplate 简介

为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架.

作为 Spring JDBC 框架的核心, JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法. 每个模板方法都能控制整个过程, 并允许覆盖过程中的特定任务. 通过这种方式, 可以在尽可能保留灵活性的情况下, 将数据库存取的工作量降到最低。

二、使用 JdbcTemplate 对数据库的操作

用 sql 语句和参数更新数据库:

Spring(八)JdbcTemplate_第1张图片

批量更新数据库:

Spring(八)JdbcTemplate_第2张图片

查询单行:

Spring(八)JdbcTemplate_第3张图片

便利的 BeanPropertyRowMapper 实现

Spring(八)JdbcTemplate_第4张图片

查询多行:

Spring(八)JdbcTemplate_第5张图片

单值查询:

Spring(八)JdbcTemplate_第6张图片

三、案例

3.1 连接数据库

导入必须的包

Spring(八)JdbcTemplate_第7张图片

数据库的信息

Spring(八)JdbcTemplate_第8张图片

导入资源文件,配置c3p0数据源

Spring(八)JdbcTemplate_第9张图片

测试获取数据库的连接

Spring(八)JdbcTemplate_第10张图片

3.2 配置JdbcTemplate

Spring(八)JdbcTemplate_第11张图片

准备数据

Spring(八)JdbcTemplate_第12张图片
Spring(八)JdbcTemplate_第13张图片
Spring(八)JdbcTemplate_第14张图片

单行更新

Spring(八)JdbcTemplate_第15张图片

批量更新

Spring(八)JdbcTemplate_第16张图片

查询单个

Spring(八)JdbcTemplate_第17张图片

查询多个

Spring(八)JdbcTemplate_第18张图片

做统计查询

Spring(八)JdbcTemplate_第19张图片

四、简化 JDBC 模板查询

每次使用都创建一个 JdbcTemplate 的新实例, 这种做法效率很低下;

JdbcTemplate 类被设计成为线程安全的, 所以可以在 IOC 容器中声明它的单个实例, 并将这个实例注入到所有的 DAO 实例中;

JdbcTemplate 也利用了 Java 1.5 的特定(自动装箱, 泛型, 可变长度等)来简化开发;

Spring JDBC 框架还提供了一个 JdbcDaoSupport 类来简化 DAO 实现. 该类声明了 jdbcTemplate 属性, 它可以从 IOC 容器中注入, 或者自动从数据源中创建.

Spring(八)JdbcTemplate_第20张图片
Spring(八)JdbcTemplate_第21张图片

如果加上这个的话会报错

Spring(八)JdbcTemplate_第22张图片

Caused by: java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required

必须要在这个类设置dataSource或者jdbcTemplate

Spring(八)JdbcTemplate_第23张图片
Spring(八)JdbcTemplate_第24张图片

不推荐使用JdbcDaoSuupport

五、在 JDBC 模板中使用具名参数

在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定.

在 Spring JDBC 框架中, 绑定 SQL 参数的另一种选择是使用具名参数(named parameter).

具名参数: SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代

具名参数只在 NamedParameterJdbcTemplate 中得到支持

在 SQL 语句中使用具名参数时, 可以在一个 Map 中提供参数值, 参数名为键

也可以使用 SqlParameterSource 参数

批量更新时可以提供 Map 或 SqlParameterSource 的数组

(1)配置NamedParameterJdbcTemplate,该对象可以使用具名参数,其没有无参数的构造器,所以必须为其构造器指定参数

(2)插入一条数据试试

Spring(八)JdbcTemplate_第25张图片

SQL语句中的参数名和类的属性一致

Spring(八)JdbcTemplate_第26张图片

你可能感兴趣的:(Spring(八)JdbcTemplate)