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类(或 ...
随机推荐
- python3制作捧腹网段子页爬虫
0x01 春节闲着没事(是有多闲),就写了个简单的程序,来爬点笑话看,顺带记录下写程序的过程.第一次接触爬虫是看了这么一个帖子,一个逗逼,爬取煎蛋网上妹子的照片,简直不要太方便.于是乎就自己照猫画虎, ...
- javascript 实现java中的Map
javascript实现java中的Map,代码是在国外的一个网站上看到的(http://stackoverflow.com/questions/368280/javascript-hashmap-e ...
- OAuth认证协议原理分析及同步消息到Twitter和Facebook使用方法
OAuth有什么用?为什么要使用OAuth? twitter或豆瓣用户一定会发现,有时候,在别的网站,点登录后转到 twitter登录,之后转回原网站,你会发现你已经登录此网站了,这种网站就是这个效果 ...
- 【BZOJ】1492: [NOI2007]货币兑换Cash(cdq分治)
http://www.lydsy.com/JudgeOnline/problem.php?id=1492 蒟蒻来学学cdq神算法啊.. 详见论文 陈丹琦<从<Cash>谈一类分治算法 ...
- CONTEST23 2014xmoi邀请赛(被pj虐哭)
http://www.luogu.org/contest/show?tid=23 表示被普及的虐瞎了T_T_T_T_T_T_T_TT_T_T_T_T_T_T_T_T 33名100多分滚粗 各种贪心神题 ...
- Xcode升级后插件失败解决方法
大家都知道每次升级Xcode 然后插件都不能用了,最根本的原因是每一个插件都有个Info.plist文件,这个文件里有个key-DVTPlugInCompatibilityUUIDs记录了能够使用该插 ...
- 关于 Apache 的 25 个初中级面试题
关于 Apache 的 25 个初中级面试题 出自:http://blog.jobbole.com/60471/
- 把本地仓库导入到Github
1, create a new rep 2, 进入到本地仓库: $ git remote set-url origin URL 3,上传 git push -v ref: https://www.do ...
- ifcfg-<interface-name> 文件配置详解
TYPE=Ethernet #网卡类型DEVICE=<name> <name>表示物理设备的名字I ...
- Spring_day04--Spring框架整合hibernate框架
Spring框架整合hibernate框架 1 把hibernate核心配置文件中配置数据库信息,把数据库信息在spring进行配置 2 把hibernate里面的sessionFactory创建交给 ...