JDBC 框架概述

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

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

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

JdbcTemplate 类

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

JdbcTemplate 类的实例是线程安全配置的。所以你可以配置 JdbcTemplate 的单个实例,然后将这个共享的引用安全地注入到多个 DAOs 中。

使用 JdbcTemplate 类时常见的做法是在你的 Spring 配置文件中配置数据源,然后共享数据源 bean 依赖注入到 DAO 类中,并在数据源的设值函数中创建了 JdbcTemplate。

环境:导入: mysql-connector-java.jarorg.springframework.jdbc.jar这两个包

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

 package com.spring.jdbcTemplate;

 import java.util.List;

 import javax.sql.DataSource;
/**
* 接口StudentDao,是用来封装查询方法
* @author Administrator
*
*/ public interface StudentDao { public void setDataSource(DataSource ds);
//添加记录
public void addStudent(String name,Integer age);
//通过Student ID查询学生记录,返回值为Student类型
public Student getStudentId(Integer id);
//删除数据通过Student ID
public void delectStudent(Integer id);
//更新数据
public void updata(Integer id,Integer age);
//查询所有数据
public List<Student> SelectAllStudent();
}

2.创建一个实体类Student:

 package com.spring.jdbcTemplate;

 public class Student {
/**
* 定义学生类
*/
private String name;
private Integer age;
private Integer id; 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;
} public void printAdvice() {
System.out.println("name:" + name + ",age:" + age); } }

3.创建一个StudentMapper.java 文件,用来映射结果集(通常用于查询语句~)内容如下:

 package com.spring.jdbcTemplate;

 import java.sql.ResultSet;
import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; public class StudentMapper implements RowMapper<Student>{
/**
* 接口RowMapper被JdbcTemplate 用来映射每一行结果集的数据
* JdbcTemplate 用来执行query方法或者调用存储过程 包含方法mapRow(ResultSet rs, int rowNum)
* 第一个参数表示获取到的结果集、第二个表示结果集中获取到的结果个数,通常用于查询语句~
*/
@Override
public Student mapRow(ResultSet rs, int row) throws SQLException {
Student student=new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
} }

4.下面是为定义的 DAO 接口 StudentDAO 的实现类文件 StudentJDBCTemplate.java,具体实现到数据库的操作

 package com.spring.jdbcTemplate;

 import java.util.List;

 import javax.sql.DataSource;

 import org.springframework.jdbc.core.JdbcTemplate;
/**
* 利用Spring 内置jdbc JdbcTemplate来实现StudentDao接口,连接数据库。
* @author Administrator
*
*/
public class StudentJdbcTemplate implements StudentDao {
private DataSource dataSource;
private JdbcTemplate jdbcTemplateObject; // 设置数据源
@Override
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplateObject = new JdbcTemplate(dataSource);
} // 添加学生数据
@Override
public void addStudent(String name, Integer age) {
String sql = "insert into Student(name,age) value(?,?)";
jdbcTemplateObject.update(sql, name, age);
System.out.println("Created Record Name = " + name + " Age = " + age);
return;
} // 查询学生
@Override
public Student getStudentId(Integer id) {
String sql = "select * from Student where id=?";
Student student = jdbcTemplateObject.queryForObject(sql, new Object[] { id }, new StudentMapper());
return student;
} // 删除学生记录
@Override
public void delectStudent(Integer id) {
String sql = "delete from Student where id=?";
jdbcTemplateObject.update(sql, id);
System.out.println("Deleted Record with ID = " + id);
return;
}
//更新数据
@Override
public void updata(Integer id,Integer age) {
String SQL = "update Student set age = ? where id = ?";
jdbcTemplateObject.update(SQL, age, id);
System.out.println("Updated Record with ID = " + id);
return;
}
//查询所有数据
@Override
public List<Student> SelectAllStudent() {
String SQL = "select * from Student";
List<Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
return students;
} }

5.建立一个 MainApp.java 文件,用于测试。内容如下:

 package com.spring.jdbcTemplate;

 import java.util.List;

 import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate; public class MainApp { public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring_xml/bean.xml");
//获取getBean("StudentJdbcTemplate")对象,调用其方法操作数据库
StudentJdbcTemplate jdbcTemplate = (StudentJdbcTemplate)applicationContext.getBean("StudentJdbcTemplate"); //插入数据
/* jdbcTemplate.addStudent("张三", 23);
jdbcTemplate.addStudent("李四", 24);
jdbcTemplate.addStudent("王五", 25);
jdbcTemplate.addStudent("赵六", 26);
jdbcTemplate.addStudent("田七", 27);*/ //查询所有数据
/* List<Student> list=jdbcTemplate.SelectAllStudent();
for(Student student:list){
System.out.println(student.getId()+student.getName()+student.getAge());
}*/
//查询单条记录
/* Student student=jdbcTemplate.getStudentId(1);
System.out.println(student.getId()+student.getName()+student.getAge());*/ //删除单条记录
/*jdbcTemplate.delectStudent(2);*/ //更新数据
jdbcTemplate.updata(3, 45);
} }

测试结果:

Spring JDBC 框架使用JdbcTemplate 类的一个实例的更多相关文章

  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 框架 简介

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

  5. 【sping揭秘】3、Spring容器中bean默认是保持一个实例

    Spring容器中bean默认是保持一个实例 这里做一个测试,基础代码 package cn.cutter.start.provider; import org.springframework.con ...

  6. java中检测-在运行时指定对象是否是特定类的一个实例---关键字 instanceof

    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. if(requ ...

  7. spring jdbc查询 依赖JdbcTemplate这个类模版封装JDBC的操作

    package cn.itcast.spring.jdbc; import java.util.List; import org.springframework.jdbc.core.support.J ...

  8. spring jdbc框架

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

  9. C#调用C++导出类的一个实例

    一直认为带导出类dll的只有VC自己可以调用,其它编程语言无法调用,今天看到一篇文章才知道自己错了.https://blog.csdn.net/huiyouyongdeyu2011/article/d ...

随机推荐

  1. I. Same String

    有两个只由小写字母组成的长度为n的字符串s1,s2和m组字母对应关系,每一组关系由两个字母c1和c2组成,代表c1可以直接变成c2,你需要判断s1是否可以通过这m组关系转换为s2. 输入格式 第一行输 ...

  2. Unity ML-agents 一、初次尝试

    前言 曾在高二寒假的时候,跟表哥在外面玩,当时他问我有没有想过以后要做什么,我愣了一下,回答不上来.是的,从没想过以后要做什么,只是一直在完成学校.老师安排的任务,于是那之后半年,我一直在思考,大学要 ...

  3. JS:document.documentElement对象的

    document.documentElement.clientWidth 获取浏览器窗口文档显示区域的宽度,不包括滚动条. document.documentElement.clientHeight ...

  4. 数值计算方法实验之Lagrange 多项式插值 (Python 代码)

    一.实验目的 在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单 ...

  5. fasttext 和pysparnn的安装

  6. php微信公众号开发curl返回false

    最近刚接触温馨公众号开发,在自定义菜单用curl请求时,碰到了一个小坑.一时半会没有解决,便去问度娘,谷歌.发现都是说$url里面有空格导致的失败. 然而我的并没有空格,一直返回false,这个时候我 ...

  7. 记使用STL与unique_ptr造成的事故-段子类比

    最近由于业务需要在写内存池子时遇到了一个doule-free的问题.折腾半个晚上以为自己的眼睛花了.开始以为是编译器有问题(我也是够自信的),但是在windows下使用qtcreator vs2017 ...

  8. 敏捷与OKR实践(如何让OKR与敏捷计划共存)

    僵化的详细长期计划(根据消耗的预算跟踪进度)正在敏捷组织中迅速成为对过去的褪色怀旧记忆,这由预测和非静态路线图代替.定期在这些可视化文件前聚会,您将能够学习.共享并触发重要的对话,解决依赖性并邀请服务 ...

  9. 如何在 Windows Event Log 中查找系统重启的信息

    事件ID:12 事件ID 13: 事件ID 41: 事件ID 6008: 事件ID 1074:事件ID 1074: ========================================== ...

  10. c++ 更新 performance counter 数据,错误码 87

    ERROR_INVALID_PARAMETER 87 (0x57) The parameter is incorrect. 很可能是该送 ULONG 的送了 ULONGLONG,vise versa