同时与数据库使用普通的旧JDBC的工作,它变得繁琐写不必要的代码来处理异常,打开和关闭数据库连接等,但Spring的JDBC框架需要的所有低层次细节从打开连接,准备和执行SQL语句,过程异常,处理事务,最后关闭连接。
所以,你所要做的只是定义连接参数,并指定要执行的SQL语句,并做必要的工作,在每次迭代时从数据库中获取数据。
Spring JDBC提供了一些方法和相应不同的类与数据库进行交互。我要采取经典和最流行的做法,利用JdbcTemplateclass框架。这是管理的所有数据库的通信和异常处理中心框架类。
JdbcTemplate 类
JdbcTemplate类执行SQL查询,更新语句和存储过程调用,在结果集和提取返回参数值进行迭代。它还捕捉JDBC的异常并将其转换为通用的,信息更丰富,除了在org.springframework.dao包中定义的层次结构。
JdbcTemplate类的实例是一次配置的线程。所以,你可以配置一个JdbcTemplate的一个实例,然后安全地注入这种共享引用到多个DAO。
使用JdbcTemplate类时,通常的做法是配置一个DataSource在Spring配置文件,然后依赖关系注入该共享数据源豆到DAO类,JdbcTemplate或者是在setter数据源创建。
配置数据源
让我们一起创造数据库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) );
现在,我们需要提供一个数据源给JdbcTemplate类,因此它可以自行配置,以获得数据库访问。您可以配置数据源的XML文件中有一段代码,如下图所示:
<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和的JdbcTemplate对象数据库中的表执行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语句
您可以使用execute(...)方法的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框架的使用几个重要的例子:
S.N. | 例子& 描述 |
---|---|
1 |
Spring JDBC 例子 这个例子将说明如何编写一个简单的一个基于JDBC的Spring应用程序。 |
2 |
SpringSQL存储过程 了解如何在Spring中使用JDBC调用SQL存储过程。 |