以下内容引用自http://wiki.jikexueyuan.com/project/spring/jdbc-framework.html

在使用普通的JDBC操作数据库时,就会很麻烦的写很多不必要的代码来处理异常,比如打开和关闭数据库连接等。但Spring JDBC框架负责所有的低层细节,从开始打开连接,准备和执行SQL语句,处理异常,处理事务,到最后关闭连接。

所以当从数据库中获取数据时,你所做的是定义连接参数,指定要执行的SQL语句,每次迭代完成所需的工作。

Spring JDBC提供了几种方法和相应的不同类与数据库的接口。我将要采用JdbcTemplate类的框架,它使用了最经典和最流行的方法。这是管理所有数据库通信和异常处理的中心框架类。

JdbcTemplate类

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

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

使用JDBC模板类时的常见做法是在Spring配置文件中配置DataSource,然后将共享DataSource bean的dependency-inject注入到DAO类中,并在DataSource的setter中创建JdbcTemplate。

配置数据源

使用MySql数据库在TEST数据库总创建Student表,脚本如下:

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>

数据访问对象(DAO)

DAO代表数据访问对象,它通常用于数据库交互。DAO提供读取和写入数据到数据库的方法,并且他们应该通过其他应用程序访问它们的接口来实现此功能。

Spring中的DAO支持使用一致的方式轻松处理数据访问技术,如JDBC,Hibernate,JPA或JDO。

执行SQL语句

以下为使用SQL和JDBC Template对象对数据库表执行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<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语句

可以使用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 );

最新文章

  1. 关getClass().getClassLoader()
  2. SAM4E单片机之旅——20、DMAC之使用Multi-buffer进行内存拷贝
  3. 向github提交代码
  4. css读书笔记3:定位元素
  5. java之代理模式
  6. strcpy基本用法
  7. 【Python】linux安装tornado
  8. [LeetCode] Subsets I (78) &amp; II (90) 解题思路,即全组合算法
  9. 【转】Java中equals和==的区别
  10. 蓝桥杯算法训练&lt;一&gt;
  11. Jmeter之处理session、cookie以及如何做关联
  12. Customer Form Issue: Automatic Matching Rule Set Defaults Value AutoRuleSet-1
  13. C#单问号(?)与双问号(??)
  14. SRM482
  15. vmware 安装 ios 苹果系统
  16. K-Means算法的收敛性和如何快速收敛超大的KMeans?
  17. JS 原生JS 判断滚动条滑动到底部(兼容苹果safari)
  18. 剑指offer--38.左旋转字符串
  19. 使用CoreImage教程
  20. 《转》&#39;autocomplete=&quot;off&quot;&#39;在Chrome中不起作用解决方案

热门文章

  1. Spring事务管理全面分析
  2. webpack打包 css文件里面图片路径 替换位置
  3. 关于apache access log 统计的那些事儿
  4. QT+创建两个不相干的窗口实现一个显示一个不显示
  5. 性能测试,如何得到大量token,并保存在本地文件中
  6. Vue之组件的生命周期
  7. 基于HLS(HTTP Live Streaming)的视频直播分析与实现
  8. docker的网络(基础)
  9. Linux硬盘的检测--smartctl详细介绍
  10. Ubuntu配置SSH服务器