使用普通旧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,如以下代码段和减号所示;
数据访问对象(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";Liststudents = 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 执行任何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. | 示例&说明 |
---|---|
1 | Spring JDBC示例 这个例子将解释如何编写一个简单的基于JDBC的Spring应用程序. |
2 | Spring中的SQL存储过程 了解如何在Spring中使用JDBC时调用SQL存储过程. |