- 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 - JDBC 框架概述
在使用普通旧式 JDBC 处理数据库时,编写不必要的代码来处理异常、打开和关闭数据库连接等会变得很麻烦。但是,Spring JDBC 框架会处理所有低级细节,从打开连接开始,准备并执行SQL语句,处理异常,处理事务,最后关闭连接。
因此,您要做的只是定义连接参数并指定要执行的 SQL 语句,并在从数据库获取数据时为每次迭代执行所需的工作。
Spring JDBC 提供了多种方法和相应的不同类来与数据库交互。我将采用经典且最流行的方法,该方法利用框架的JdbcTemplate类。这是管理所有数据库通信和异常处理的中心框架类。
Jdbc模板类
JDBC Template 类执行 SQL 查询、更新语句、存储过程调用、对 ResultSet 执行迭代并提取返回的参数值。它还捕获 JDBC 异常并将其转换为 org.springframework.dao 包中定义的通用的、信息更丰富的异常层次结构。
一旦配置, JdbcTemplate类的实例就是线程安全的。因此,您可以配置JdbcTemplate的单个实例,然后安全地将这个共享引用注入到多个 DAO 中。
使用 JDBC Template 类的常见做法是在 Spring 配置文件中配置DataSource,然后将该共享 DataSource bean 依赖项注入到 DAO 类中,并在 DataSource 的 setter 中创建 JdbcTemplate。
配置数据源
让我们在数据库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 模板提供数据源,以便它可以配置自身以获取数据库访问。您可以使用一段代码在 XML 文件中配置数据源,如以下代码片段所示 -
<bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name = "driverClassName" value = "com.mysql.jdbc.Driver"/> <property name = "url" value = "jdbc:mysql://localhost: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 模板对象对数据库表执行 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 存储过程。 |