📜  Spring-JDBC框架概述

📅  最后修改于: 2020-11-11 07:06:47             🧑  作者: Mango


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

因此,您要做的就是定义连接参数并指定要执行的SQL语句,并在每次从数据库中获取数据时进行每次迭代所需的工作。

Spring JDBC提供了几种方法以及与数据库相对应的不同类。我将采用经典且最受欢迎的方法,该方法利用了框架的JdbcTemplate类。这是管理所有数据库通信和异常处理的中央框架类。

JdbcTemplate类

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

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

使用JDBC模板类的一种常见做法是在Spring配置文件中配置数据源,然后将共享的数据源bean依赖注入到DAO类中,并在数据源的设置器中创建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文件中配置DataSource,如以下代码片段所示-


   
   
   
   

数据访问对象(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 {
   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 students = jdbcTemplateObject.query(
   SQL, new StudentMapper());

public class StudentMapper implements RowMapper {
   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框架的用法-

Sr.No. Example & Description
1 Spring JDBC Example

This example will explain how to write a simple JDBC-based Spring application.

2 SQL Stored Procedure in Spring

Learn how to call SQL stored procedure while using JDBC in Spring.