目录

Spring - JDBC Framework

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

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

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

JdbcTemplate类

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

一旦配置, JdbcTemplate类的实例就是threadsafe 。 因此,您可以配置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模板提供一个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>

Data Access Object (DAO)

DAO代表数据访问对象,它通常用于数据库交互。 存在DAO以提供向数据库读取和写入数据的方法,并且它们应该通过接口公开此功能,应用程序的其余部分将通过该接口访问它们。

Spring中的DAO支持使得以一致的方式使用JDBC,Hibernate,JPA或JDO等数据访问技术变得容易。

执行SQL语句

让我们看看如何使用SQL和JDBC Template对象对数据库表执行CRUD(创建,读取,更新和删除)操作。

Querying for an integer

String SQL = "select count(*) from Student";
int rowCount = jdbcTemplateObject.queryForInt( SQL );

Querying for a long

String SQL = "select count(*) from Student";
long rowCount = jdbcTemplateObject.queryForLong( SQL );

A simple query using a bind variable

String SQL = "select age from Student where id = ?";
int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});

Querying for a String

String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);

Querying and returning an object

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;
   }
}

Querying and returning multiple objects

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;
   }
}

Inserting a row into the table

String SQL = "insert into Student (name, age) values (?, ?)";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );

Updating a row into the table

String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );

Deleting a row from the table

String SQL = "delete Student where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{20} );

执行DDL语句

您可以使用jdbcTemplateexecute(..)方法来执行任何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 Framework示例

基于以上概念,让我们检查几个重要的例子,它们将帮助您理解Spring中JDBC框架的用法 -

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

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

2 Spring中的SQL存储过程

学习如何在Spring中使用JDBC时调用SQL存储过程。

↑回到顶部↑
WIKI教程 @2018