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. C# 基础知识系列- 11 委托和事件

    0. 前言 事件和委托是C#中的高级特性,也是C#中很有意思的一部分.出现事件的地方,必然有委托出现:而委托则不一定会有事件出现.那为什么会出现这样的关系呢?这就需要从事件和委托的定义出发,了解其中的 ...

  2. Mybatis Generator通用Join的实现

    通常,我们使用Mybatis实现join表关联的时候,一般都是通过在xml或注解里写自定义sql实现. 本文通过Mybatis Generator的插件功能新增一个JoinPlugin插件,只要在配置 ...

  3. Centos8安装docker-compose

    一.首先检查是否有pip 执行命令:piv -V 二.更新pip 执行命令:pip install --upgrade pip 三.下载  setuptools 执行命令 :pip install - ...

  4. 如何让ThreadPoolExecutor更早地创建非核心线程

    最近在项目中遇到一个需要用线程池来处理任务的需求,于是我用ThreadPoolExecutor来实现,但是在实现过程中我发现提交大量任务时它的处理逻辑是这样的(提交任务还有一个submit方法内部也调 ...

  5. 2019-2020-1 20199308《Linux内核原理与分析》第六周作业

    <Linux内核分析> 第五章 系统调用的三层机制(下) 5.1 给MenuOS增加命令 强制删除当前menu目录,用get clone重新克隆一个新版本的menu,运行make root ...

  6. SQLI-LABS学习笔记(二)

    逼话少说,如有错误,烦请指出,谢谢 这两天生病,效率很低 第5关 打开页面 发现跟前几题不同,没有直接返回数据.. 加个单引号 You have an error in your SQL syntax ...

  7. phper:敢问路在何方

    很多php程序员存在未来发展方面的困扰,介于各方面的因素,phper 比其他程序员更容易遇到上升天花板. 一方面,一般只有初创企业为了快速实现产品上市以及极容易招到 phper 才使用 php 来实现 ...

  8. 非阻塞同步机制和CAS

    目录 什么是非阻塞同步 悲观锁和乐观锁 CAS 非阻塞同步机制和CAS 我们知道在java 5之前同步是通过Synchronized关键字来实现的,在java 5之后,java.util.concur ...

  9. Spring Boot中使用@JsonComponent

    文章目录 序列化 反序列化 在同一个class中序列化和反序列化 Spring Boot中使用@JsonComponent @JsonComponent 是Spring boot的核心注解,使用@Js ...

  10. Linux 设置秘钥登录(SSH免密连接)

    Secure Shell 协议,简称 SSH,是一种加密网络协议,用于客户端和主机之间的安全连接,并支持各种身份验证机制,目前最实用的身份验证机制就是基于密码的身份验证和基于公钥的身份验证两种.Lin ...