JDBC框架概述

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

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

Spring JDBC提供几种方法和数据库中相应的不同的类与接口。JdbcTemplate类框架是最经典和最受欢迎的方法,也是管理所有数据库通信和异常处理的中央框架类。

JdbcTemplate框架

JdbcTemplate类执行SQL查询,更新语句和存储过程调用,执行迭代结果集合提取返回参数值。它也捕获JDBC异常并转换它们到org.springframework.dao包中定义的通用类,更多的信息,异常层次结构。

JdbcTemplate类的实例是线程安全配置的。所以你可以配置JdbcTemplate的单个实例,然后将这个共享的引用安全的注入到多个DAOs中,使用 JdbcTemplate 类时常见的做法是在你的 Spring 配置文件中配置数据源,然后共享数据源 bean 依赖注入到 DAO 类中,并在数据源的设值函数中创建了 JdbcTemplate。

配置数据源

在数据库springtest中创建一个数据表Student。本文使用MySQL数据库。

DROP DATABASE IF EXISTS springtest;
CREATE DATABASE springtest;
CREATE TABLE Student(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
age INT NOT NULL
);

现在,我们需要提供一个数据源到JdbcTemplate中,所以它可以配置本身来获得数据库访问,你可以在XML文件中配置数据源,其中一段代码如下所示:

<bean id="dataSource" class="org.springframework.jdbc.dataSource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://10.0.10.33:3306/springtest"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>

数据访问对象(DAO)

DAO代表常用的数据库交互的数据库访问对象。DAOs提供一种方法来读取数据并将数据写入数据库中,它们应该通过一个接口显示此功能,应用程序的其余部分访问它们。

在Spring中,数据访问对象(DAO)支持很容易用统一的方法使用数据访问技术,如JDBC,Hibernate,JPA或者JDO。

Spring JDBC示例

创建实体类Student.java

Student.java

package com.fpc.JdbcTemplate;

public class Student {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
} }

创建数据访问对象接口文件StudentDAO.java文件:

StudentDAO.java

package com.fpc.JdbcTemplate.Dao;

import javax.sql.DataSource;

import com.fpc.JdbcTemplate.Entity.Student;

import java.util.List;

public interface StudentDao {
public void setDataSource(DataSource ds); //CRUD-C
public void create(String name,Integer age); //CRUD-R
public void getStudent(Integer id);
public List<Student> listStudents(); //CRUD-U
public void update(Integer id ,String name, Integer age); //CRUD-D
public void delete(Integer id);
}

创建数据库表与实体类的映射类StudentMapper.java文件

StudentMapper.java

package com.fpc.JdbcTemplate.Mapper;

import java.sql.ResultSet;
import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; import com.fpc.JdbcTemplate.Entity.Student; public class StudentMapper implements RowMapper<Student> { @Override
public Student mapRow(ResultSet resultSet, int rowNum) throws SQLException {
// TODO Auto-generated method stub
Student student = new Student();
student.setId(resultSet.getInt("id"));
student.setName(resultSet.getString("name"));
student.setAge(resultSet.getInt("age"));
return student;
} }

StudentDao接口的实现类StudentJDBCTemplate.java

StudentJDBCTemplate.java

package com.fpc.JdbcTemplate.DaoImpl;

import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;

import com.fpc.JdbcTemplate.Dao.StudentDao;
import com.fpc.JdbcTemplate.Entity.Student;
import com.fpc.JdbcTemplate.Mapper.StudentMapper; public class StudentJDBCTemplate implements StudentDao {
private DataSource dataSource;
private JdbcTemplate jdbcTemplate;
@Override
public void setDataSource(DataSource ds) {
// TODO Auto-generated method stub
dataSource = ds;
jdbcTemplate = new JdbcTemple(dataSource);
} @Override
public void create(String name, Integer age) {
// TODO Auto-generated method stub
String sql = "insert into Student (name,age) values(?,?)";
jdbcTemplate.update(sql,name,age);
} @Override
public Student getStudent(Integer id) {
// TODO Auto-generated method stub
String sql = "select * from Student where id = ?";
Student student = jdbcTemplate.queryForObject(sql, new Object[] {id},new StudentMapper());
return student;
} @Override
public List<Student> listStudents() {
// TODO Auto-generated method stub
String sql = "select * from Student";
List<Student> students = jdbcTemplate.query(sql,new StudentMapper());
return students;
} @Override
public void update(Integer id, String name, Integer age) {
// TODO Auto-generated method stub
String sql = "update Student set name = ? ,age = ? where id = ?";
jdbcTemplate.update(sql,name,age,id);
} @Override
public void delete(Integer id) {
// TODO Auto-generated method stub
String sql = "delete from Student where id = ?";
jdbcTemplate.update(sql,id); } }

编写测试类StudentJDBCTemplateTest.java

package com.fpc.JdbcTemplate.Test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.fpc.JdbcTemplate.DaoImpl.StudentJDBCTemplate;
import com.fpc.JdbcTemplate.Entity.Student; public class StudentJDBCTemplateTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
StudentJDBCTemplate studentJDBCTemplate = (StudentJDBCTemplate) context.getBean("studentJDBCTemplate"); //测试create功能
studentJDBCTemplate.create("fpc", 23);
}
}

Bean.xml的完整代码:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://10.0.10.33:3306/springtest"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<!-- Definition for studentJDBCTemplate bean -->
<bean id="studentJDBCTemplate"
class="com.fpc.JdbcTemplate.DaoImpl.StudentJDBCTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>

测试插入功能:

//测试create功能
studentJDBCTemplate.create("fpc", 23);

查看数据库中的结果:

测试getStudent功能

//测试getStudent功能
Student student = studentJDBCTemplate.getStudent(1);
System.out.println("student'id : " + student.getId() + " student'name : " + student.getName() + " student'age : " + student.getAge());

运行结果:

测试update功能:

//测试update功能
System.out.println("before update: ");
Student student = studentJDBCTemplate.getStudent(1);
System.out.println("student'id : " + student.getId() + " student'name : " + student.getName() + " student'age : " + student.getAge());
System.out.println("after update: ");
studentJDBCTemplate.update(1, "fpc", 24);
Student student1 = studentJDBCTemplate.getStudent(1);
System.out.println("student'id : " + student1.getId() + " student'name : " + student1.getName() + " student'age : " + student1.getAge());

测试listStudents功能:

//测试listStudent功能
studentJDBCTemplate.create("Lily", 25);
List<Student> list = studentJDBCTemplate.listStudents();
for (Student student : list ) {
System.out.println("student'id : " + student.getId() + " student'name : " + student.getName() + " student'age : " + student.getAge());
}

测试delete功能:

//测试delete功能
System.out.println("before delete: ");
List<Student> list1 = studentJDBCTemplate.listStudents();
for (Student student : list1 ) {
System.out.println("student'id : " + student.getId() + " student'name : " + student.getName() + " student'age : " + student.getAge());
}
studentJDBCTemplate.delete(1); System.out.println("after delete: ");
List<Student> list = studentJDBCTemplate.listStudents();
for (Student student : list ) {
System.out.println("student'id : " + student.getId() + " student'name : " + student.getName() + " student'age : " + student.getAge());
}

运行结果:

Sping-Spring JDBC框架的更多相关文章

  1. Spring Jdbc 框架整合的第一天

    Spring  Jdbc的概述 它是Spring框架的持久层子框架.用于对数据库的操作 什么是数据库的操作? 答:对数据库的增删改查 在使用Spring  Jdbc框架,要用到一个类---->J ...

  2. ref:Spring JDBC框架

    ref:https://blog.csdn.net/u011054333/article/details/54772491 Spring JDBC简介 先来看看一个JDBC的例子.我们可以看到为了执行 ...

  3. 11.Spring——JDBC框架

    1.DBC 框架概述 2.Spring JDBC 示例 3.Spring 中 SQL 的存储过程 1.DBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关 ...

  4. Spring JDBC 框架使用JdbcTemplate 类的一个实例

    JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...

  5. Spring JDBC 框架 简介

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

  6. spring jdbc框架

    spring+jdbc 1.jdbc编程的特点: 模板编程 固定代码+动态的参数 spring产生dataSource JdbcTemplate{//模板编程 private DataSource d ...

  7. Spring(十二)之JDBC框架

    JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...

  8. jdbc框架有很多,包括spring jdbc

    1.由于jdbc连接的繁琐性,故很多公司封装了jdbc框架,比如spring jdbc 2.比如spring jdbc框架中,用jdbctemplate, 通过jdbcTemplate 提供 int ...

  9. Spring的JDBC框架概述

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/jdbc-framework.html: 在使用普通的JDBC操作数据库时,就会很麻烦的写很多不必要 ...

  10. 开涛spring3(7.5) - 对JDBC的支持 之 7.5 集成Spring JDBC及最佳实践

    7.5 集成Spring JDBC及最佳实践 大多数情况下Spring JDBC都是与IOC容器一起使用.通过配置方式使用Spring JDBC. 而且大部分时间都是使用JdbcTemplate类(或 ...

随机推荐

  1. HeadFisrt 设计模式03 装饰者

    类应该对扩展开放, 对修改关闭. 所谓装饰者模式, 是指用其他的类来装饰某个类, 装饰者说白了就是使用 has-a 来代替 is-a 隐喻 咖啡店, 有很多种咖啡, 咖啡里还要增加一些 milk, 面 ...

  2. Desugar Scala(15) -- unapply和unapplySeq方法

    欢迎关注我的新博客地址:http://cuipengfei.me/ 实在想不到什么动词可以当做脱衣服来讲了,所以从现在开始这系列博文就叫做Desugar Scala了.除非哪天才思泉涌,又想到了新词: ...

  3. 2015 Multi-University Training Contest 5 1009 MZL's Border

    MZL's Border Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5351 Mean: 给出一个类似斐波那契数列的字符串序列 ...

  4. 关于跨平台的理解以及Unity的由来--Unity学习

    1.在2000到2003年的时候,掀起了一阵Java跨平台的浪潮,Java本来是在自己的Java机器上运行的,这时候出现了一个叫Java虚拟机的东西,Java虚拟机可以在Windows系统中运行,这样 ...

  5. 小结:单调栈 & 单调队列

    概要: 对于维护信息具有单调性的性质或者问题可以转化为具有单调性质的模型的题,我们可以考虑用单调栈或单调队列. 技巧及注意: 技巧很多,只要能将问题转化为单调性问题,就好解决了. 当维护固定长度的单调 ...

  6. 电脑端与iPad 端如何共享ChemDraw结构

    在日常生活中,我们使用的电脑会有好几种系统,很多的软件不能做好各个系统的兼容.但是ChemDraw软件很好的解决了这个问题,可以应用于Mac.Windows两个电脑客户端以及Chem3D for iP ...

  7. 运动目标检测ViBe算法

    一.运动目标检测简介   视频中的运动目标检测这一块现在的方法实在是太多了.运动目标检测的算法依照目标与摄像机之间的关系可以分为静态背景下运动检测和动态背景下运动检测.先简单从视频中的背景类型来讨论. ...

  8. mysql备份数据库常见问题

    如果遇到mysqldump: unknown option '--no-beep'  ,可以加上 --no-dafaults 命令结尾无需分号 mysqldump --no-defaults -uro ...

  9. WPF 附加事件

    在WPF中有许多控件有他们自己的特殊的事件.按钮就是一个例子——它添加了 Click 事件,而其他任何类都没有定义该事件. 这回导致两难的境地.假设在 StackPanel 面板中包装了一堆按钮,并且 ...

  10. 应用开发之Linq和EF

    本章简言 上一章笔者对于WinForm开发过程用到的几个知识点做了讲解.笔者们可以以此为开端进行学习.而本章我们来讲一个跟ORM思想有关的知识点.在讲之前让我们想一下关于JAVA的hibernate知 ...