Spring JDBC 框架
-
JDBC框架概述
当使用普通的旧JDBC处理数据库时,编写不必要的代码来处理异常,打开和关闭数据库连接等变得很麻烦。但是,Spring JDBC 框架k会处理从打开连接,准备连接开始的所有低级细节。并执行SQL语句,处理异常,处理事务并最终关闭连接。因此,您要做的就是定义连接参数并指定要执行的SQL语句,并在每次从数据库中获取数据时为每次迭代执行所需的工作。Spring JDBC提供了几种方法以及与数据库相对应的不同类。我将采用经典且最受欢迎的方法,该方法利用了框架的JdbcTemplate类。这是管理所有数据库通信和异常处理的中央框架类。 -
JdbcTemplate类
JdbcTemplate类执行SQL查询,更新语句,存储过程调用,对ResultSet(结果集)执行迭代并提取返回的参数值。它还捕获JDBC异常,并将其转换为org.springframework.dao包中定义的通用,信息量更大的异常层次结构。一旦配置,JdbcTemplate类的实例是线程安全的。因此,您可以配置JdbcTemplate的单个实例,然后安全地将此共享引用注入到多个DAO中。使用JdbcTemplate类的一种常见做法是在Spring配置文件中配置DataSource,然后将共享的DataSource bean依赖注入到DAO类中,并在Setter中为DataSource创建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,如以下代码片段所示<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(创建,读取,更新和删除)操作。查询 int:String SQL = "select count(*) from Student"; int rowCount = jdbcTemplateObject.queryForInt( SQL );
查询 long: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 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示例 - 这个例子将解释如何编写一个简单的基于JDBC的Spring应用程序。
- Spring中的SQL存储过程 - 了解在Spring中使用JDBC时如何调用SQL存储过程。