- Spring 核心基础
- Spring - 首页
- Spring - 概述
- Spring - 架构
- Spring - 环境设置
- Spring - Hello World 示例
- Spring - IoC 容器
- Spring - Bean 定义
- Spring - Bean 作用域
- Spring - Bean 生命周期
- Spring - Bean 后处理器
- Spring - Bean 定义继承
- Spring - 依赖注入
- Spring - 注入内部 Bean
- Spring - 注入集合
- Spring - Bean 自动装配
- 基于注解的配置
- Spring - 基于 Java 的配置
- Spring - Spring 中的事件处理
- Spring - Spring 中的自定义事件
- Spring - Spring 框架中的 AOP
- Spring - JDBC 框架
- Spring - 事务管理
- Spring - Web MVC 框架
- Spring - 使用 Log4J 进行日志记录
- Spring 问题与解答
- Spring - 问题与解答
- Spring 有用资源
- Spring - 快速指南
- Spring - 有用资源
- Spring - 讨论
Spring - JDBC 框架概述
在使用普通的 JDBC 与数据库交互时,编写不必要的代码来处理异常、打开和关闭数据库连接等变得很麻烦。但是,Spring JDBC 框架负责所有底层细节,从打开连接、准备和执行 SQL 语句、处理异常、处理事务,最后关闭连接。
因此,您需要做的只是定义连接参数,指定要执行的 SQL 语句,并在从数据库获取数据时为每次迭代执行所需的工作。
Spring JDBC 提供了几种方法,以及相应不同的类来与数据库交互。我将采用经典且最流行的方法,该方法使用框架的JdbcTemplate类。这是管理所有数据库通信和异常处理的核心框架类。
JdbcTemplate 类
JDBC Template 类执行 SQL 查询、更新语句、存储过程调用,对 ResultSet 进行迭代,并提取返回的参数值。它还会捕获 JDBC 异常并将它们转换为 org.springframework.dao 包中定义的通用、更具信息量的异常层次结构。
JdbcTemplate 类的实例一旦配置后就是线程安全的。因此,您可以配置一个JdbcTemplate的单个实例,然后安全地将此共享引用注入到多个 DAO 中。
使用 JDBC Template 类时,一种常见做法是在 Spring 配置文件中配置一个DataSource,然后将该共享 DataSource Bean 依赖注入到您的 DAO 类中,并且 JdbcTemplate 在 DataSource 的 setter 中创建。
配置数据源
让我们在我们的数据库TEST中创建一个数据库表Student。我们假设您正在使用 MySQL 数据库,如果您使用任何其他数据库,则可以相应地更改您的 DDL 和 SQL 查询。
CREATE TABLE Student( ID INT NOT NULL AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
现在我们需要向 JDBC Template 提供一个 DataSource,以便它可以自行配置以获取数据库访问权限。您可以在 XML 文件中使用如下代码片段配置 DataSource:
<bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name = "driverClassName" value = "com.mysql.jdbc.Driver"/> <property name = "url" value = "jdbc:mysql://127.0.0.1:3306/TEST"/> <property name = "username" value = "root"/> <property name = "password" value = "password"/> </bean>
数据访问对象 (DAO)
DAO 代表数据访问对象,通常用于数据库交互。DAO 的存在是为了提供一种读取和写入数据库数据的方法,并且它们应该通过一个接口公开此功能,应用程序的其余部分将通过该接口访问它们。
Spring 中的 DAO 支持使您可以以一致的方式轻松使用 JDBC、Hibernate、JPA 或 JDO 等数据访问技术。
执行 SQL 语句
让我们看看如何使用 SQL 和 JDBC Template 对象对数据库表执行 CRUD(创建、读取、更新和删除)操作。
查询整数
String SQL = "select count(*) from Student"; int rowCount = jdbcTemplateObject.queryForInt( SQL );
查询长整数
String SQL = "select count(*) from Student"; long rowCount = jdbcTemplateObject.queryForLong( SQL );
使用绑定变量的简单查询
String SQL = "select age from Student where id = ?"; int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});
查询字符串
String SQL = "select name from Student where id = ?"; String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);
查询并返回对象
String SQL = "select * from Student where id = ?"; Student student = jdbcTemplateObject.queryForObject( SQL, new Object[]{10}, new StudentMapper()); public class StudentMapper implements RowMapper<Student> { public Student mapRow(ResultSet rs, int rowNum) throws SQLException { Student student = new Student(); student.setID(rs.getInt("id")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); return student; } }
查询并返回多个对象
String SQL = "select * from Student"; List<Student> students = jdbcTemplateObject.query( SQL, new StudentMapper()); public class StudentMapper implements RowMapper<Student> { public Student mapRow(ResultSet rs, int rowNum) throws SQLException { Student student = new Student(); student.setID(rs.getInt("id")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); return student; } }
将一行插入表中
String SQL = "insert into Student (name, age) values (?, ?)"; jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );
更新表中的一行
String SQL = "update Student set name = ? where id = ?"; jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );
从表中删除一行
String SQL = "delete Student where id = ?"; jdbcTemplateObject.update( SQL, new Object[]{20} );
执行 DDL 语句
您可以使用jdbcTemplate中的execute(..)方法执行任何 SQL 语句或 DDL 语句。以下是如何使用 CREATE 语句创建表的示例:
String SQL = "CREATE TABLE Student( " + "ID INT NOT NULL AUTO_INCREMENT, " + "NAME VARCHAR(20) NOT NULL, " + "AGE INT NOT NULL, " + "PRIMARY KEY (ID));" jdbcTemplateObject.execute( SQL );
Spring JDBC 框架示例
基于上述概念,让我们检查一些重要的示例,这些示例将帮助您了解在 Spring 中使用 JDBC 框架的方法:
序号 | 示例和说明 |
---|---|
1 | Spring JDBC 示例
此示例将说明如何编写简单的基于 JDBC 的 Spring 应用程序。 |
2 | Spring 中的 SQL 存储过程
了解如何在 Spring 中使用 JDBC 调用 SQL 存储过程。 |