Sping-Spring JDBC框架
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框架的更多相关文章
- Spring Jdbc 框架整合的第一天
Spring Jdbc的概述 它是Spring框架的持久层子框架.用于对数据库的操作 什么是数据库的操作? 答:对数据库的增删改查 在使用Spring Jdbc框架,要用到一个类---->J ...
- ref:Spring JDBC框架
ref:https://blog.csdn.net/u011054333/article/details/54772491 Spring JDBC简介 先来看看一个JDBC的例子.我们可以看到为了执行 ...
- 11.Spring——JDBC框架
1.DBC 框架概述 2.Spring JDBC 示例 3.Spring 中 SQL 的存储过程 1.DBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关 ...
- Spring JDBC 框架使用JdbcTemplate 类的一个实例
JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...
- Spring JDBC 框架 简介
在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等. 但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常 ...
- spring jdbc框架
spring+jdbc 1.jdbc编程的特点: 模板编程 固定代码+动态的参数 spring产生dataSource JdbcTemplate{//模板编程 private DataSource d ...
- Spring(十二)之JDBC框架
JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...
- jdbc框架有很多,包括spring jdbc
1.由于jdbc连接的繁琐性,故很多公司封装了jdbc框架,比如spring jdbc 2.比如spring jdbc框架中,用jdbctemplate, 通过jdbcTemplate 提供 int ...
- Spring的JDBC框架概述
以下内容引用自http://wiki.jikexueyuan.com/project/spring/jdbc-framework.html: 在使用普通的JDBC操作数据库时,就会很麻烦的写很多不必要 ...
- 开涛spring3(7.5) - 对JDBC的支持 之 7.5 集成Spring JDBC及最佳实践
7.5 集成Spring JDBC及最佳实践 大多数情况下Spring JDBC都是与IOC容器一起使用.通过配置方式使用Spring JDBC. 而且大部分时间都是使用JdbcTemplate类(或 ...
随机推荐
- 关闭socket连接最好的方法
最好关闭连接的方法 `C S` `shutdown-WR ` `发送FIN` ` read-0发送ACK` ` ......` ` close` ` 发送FIN` `read-0` `close` ` ...
- 机器学习:如何通过Python入门机器学习
我们都知道机器学习是一门综合性极强的研究课题,对数学知识要求很高.因此,对于非学术研究专业的程序员,如果希望能入门机器学习,最好的方向还是从实践触发. 我了解到Python的生态对入门机器学习很有帮助 ...
- 断言(assert)和程序的安全保证
断言,用来DEBUG错误的,在DEBUG时发现然后跟踪错误! 通常 写一个程序给别人使用的,这个代码在安全性上的要求是什么呢?直觉上,我们都知道程序不应该崩.但是通常C/C++的程序如果把包含API的 ...
- C语言0长度数组(柔性数组)
0长度数组,又称为柔性数组(flexible array).通经常使用来实现变长数组.常见于TLV(type-length-value)的数据结构中. 在标准 C 和 C++ 中,不同意用 0 长度数 ...
- oracle decode处理被除数为0 的情况
,,a) per from aa; 例如 我的b为(N30+N31+N32+N33+N34+N35+N36+N37+N38) ,,(N33)||'%' WHERE ssrq=''||sssq||'';
- Socket长连接和短连接的区别
https://blog.csdn.net/jasonjwl/article/details/52085264 短连接 连接->传输数据->关闭连接 HTTP是无状态的,浏览器和服务器每进 ...
- winform 递归循环阻止机构
private void GetTree() { DataTable dt = new DataTable(); var sql = @" select OUID,ParentOUID,OU ...
- 【BZOJ1857】[Scoi2010]传送带 三分套三分
[BZOJ1857][Scoi2010]传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度 ...
- ios UITableView多选删除
第一步, - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath ...
- Arduino开发版学习计划--蜂鸣器
文章内容参考:http://www.cnblogs.com/xiaowuyi/p/3343757.html 遇到不懂的方法,可以查看Arduino自带的API 就直接点击arduino的IDE里面菜单 ...