Spring - JDBC Framework概述

使用普通旧JDBC处理数据库时,编写不必要的代码来处理异常,打开和关闭数据库连接等变得很麻烦.但是,Spring JDBC Framework会从打开数据库连接开始处理所有低级细节.连接,准备和执行SQL语句,处理异常,处理事务并最终关闭连接.

所以你要做的就是定义连接参数并指定SQL语句执行并在从数据库中获取数据时为每次迭代执行所需的工作.

Spring JDBC提供了几种方法和相应的不同类来与数据库进行交互.我将采用经典和最流行的方法,利用框架的 JdbcTemplate 类.这是管理所有数据库通信和异常处理的中央框架类.

JdbcTemplate类

JDBC Template类执行SQL查询,更新语句,存储过程调用,对ResultSet执行迭代,并提取返回的参数值.它还捕获JDBC异常并将它们转换为org.springframework.dao包中定义的通用的,更具信息性的异常层次结构.

JdbcTemplate 类的实例一旦配置就是线程安全.因此,您可以配置 JdbcTemplate 的单个实例,然后将此共享引用安全地注入到多个DAO中.

使用JDBC Template类时的常见做法是在Spring配置文件中配置 DataSource ,然后将共享DataSource bean依赖注入到DAO类中,并在DataSource的setter中创建JdbcTemplate.

配置数据源

让我们在数据库 TEST 中创建数据库表学生.我们假设您正在使用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模板提供一个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://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 执行任何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框架的用法;

Sr.No.示例&说明
1Spring JDBC示例

这个例子将解释如何编写一个简单的基于JDBC的Spring应用程序.

2Spring中的SQL存储过程

了解如何在Spring中使用JDBC时调用SQL存储过程.