【Spring】Spring JDBC原理与应用实例讲解

林炳文Evankaka原创作品。转载请注明出处

一、概述

使用Spring进行基本的JDBC访问数据库有多种选择。Spring至少提供了三种不同的工作模式:Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDBC模板类是第一种工作模式。三种模式如下:

JdbcTemplate:是Spring中最基本的JDBC模板, 利用JDBC和简单的索引参数查询对数据库进行简单访问NamedParameterJdbcTemplate:能够在查询的时候把值绑定到SQL里的命名参数,而不是索引参数 NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干 NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。SimpleJdbcTemplate:利用Java5的特性,比如自动装箱、通用和可变参数列表来简化JDBC模板的使用SimpleJdbcTemplate内部包含了一个NamedParameterJdbcTemplate;所以NamedParameterJdbcTemplate能做的事情SimpleJdbcTemplate都能干,SimpleJdbcTemplate相对于NamedParameterJdbcTemplate主要增加了JDK5.0的泛型和可变长度参数支持。

下面主要来讲 JdbcTemplate:

JdbcTemplate类通过模板设计模式帮助我们消除了冗长的代码,只做需要做的事情(即可变部分),并且帮我们做哪些固定部分,如连接的创建及关闭。 JdbcTemplate类对可变部分采用回调接口方式实现,如ConnectionCallback通过回调接口返回给用户一个连接,从而可以使用该连 接做任何事情、StatementCallback通过回调接口返回给用户一个Statement,从而可以使用该Statement做任何事情等等,还 有其他一些回调接口如图所示。

JdbcTemplate支持的回调接口Spring JDBC抽象框架所带来的价值将在以下几个方面得以体现:(注:使用了Spring JDBC抽象框架之后,应用开发人员只需要完成斜体字部分的编码工作。)

定义数据库连接参数打开数据库连接声明SQL语句预编译并执行SQL语句遍历查询结果(如果需要的话)处理每一次遍历操作处理抛出的任何异常处理事务关闭数据库连接Spring将替我们完成所有使用JDBC API进行开发的单调乏味的、底层细节处理工作。

二、使用步骤1、使用JdbcTemplate来访问数据

只需要配置DataSource就能够让JdbcTemplate工作,如下配置:

<!– 配置数据源 –><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="christmas258@" /></bean><!–配置一个JdbcTemplate实例,,并将这个“共享的”,“安全的”实例注入到不同的DAO类中去 –><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource" /></bean>2、现在我们可以把JdbcTemplate装配到DAO,使用它来访问数据库

@Autowiredprivate JdbcTemplate jdbcTemplate;3、开始操作数据库,如下面的插入

@Overridepublic void insert(Student student) {jdbcTemplate.update("INSERT INTO student VALUES(‘" + student.getId()+ "’, ‘" + student.getName() + "’, ‘" + student.getAge()+ "’, ‘" + student.getSex() + "’)");}三、使用范例

这里我们要实例Spring Jdbc和Mysql数据库连接,建表、执行插入、查找、删除等功能。

1、新建一个JavaProject工程,导入包mysql-connector-java-5.1.22-bin.jar+spring3.2+commons-logging-1.2.jar

2、首先先建好数据库对应的Model:

package com.mucfc.model;/** *数据库传输类*作者 林炳文(ling20081005@126.com 博客:) *时间 2015.5.24*/public class Student {private int id;private String name;private int age;private String sex;public Student(){}public Student(int id,String name,int age,String sex){this.id=id;this.name=name;this.age=age;this.sex=sex;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}}然后还有一个数据库每一行的封装

package com.mucfc.model;import java.sql.ResultSet;/** *封装数据中的一行*作者 林炳文(ling20081005@126.com 博客:) *时间 2015.5.24*/import java.sql.SQLException;/** * RowMapper可以将数据中的每一行封装成用户定义的类 */import org.springframework.jdbc.core.RowMapper; 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"));student.setSex(rs.getString("sex"));return student;}}3、DAO层:

接口类:

当你感到悲哀痛苦时,最好是去学些什么东西。

【Spring】Spring JDBC原理与应用实例讲解

相关文章:

你感兴趣的文章:

标签云: