JDBC 框架概述

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

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

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

JdbcTemplate 类

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

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

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

演示示例如下:

(1)建立mysql数据库,并导入该脚本,库名可任意命名,这里命名为test,sql脚本为:

CREATE TABLE Student(ID   INT NOT NULL AUTO_INCREMENT,NAME VARCHAR(20) NOT NULL,AGE  INT NOT NULL,PRIMARY KEY (ID)
);

(2)创建实体

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

(3)创建DAO

package com.tutorialspoint;
import java.util.List;
import javax.sql.DataSource;
public interface StudentDAO {/** * This is the method to be used to initialize* database resources ie. connection.*/public void setDataSource(DataSource ds);/** * This is the method to be used to create* a record in the Student table.*/public void create(String name, Integer age);/** * This is the method to be used to list down* a record from the Student table corresponding* to a passed student id.*/public Student getStudent(Integer id);/** * This is the method to be used to list down* all the records from the Student table.*/public List<Student> listStudents();/** * This is the method to be used to delete* a record from the Student table corresponding* to a passed student id.*/public void delete(Integer id);/** * This is the method to be used to update* a record into the Student table.*/public void update(Integer id, Integer age);
}

(4)创建StudentMapper

package com.tutorialspoint;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class StudentMapper implements RowMapper<Student> {public Student mapRow(ResultSet rs, int rowNum) throws SQLException {Student student = new Student();student.setId(rs.getInt("id"));student.setName(rs.getString("name"));student.setAge(rs.getInt("age"));return student;}
}

(5)创建StudentJDBCTemplate

package com.tutorialspoint;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
public class StudentJDBCTemplate implements StudentDAO {private DataSource dataSource;private JdbcTemplate jdbcTemplateObject; public void setDataSource(DataSource dataSource) {this.dataSource = dataSource;this.jdbcTemplateObject = new JdbcTemplate(dataSource);}public void create(String name, Integer age) {String SQL = "insert into Student (name, age) values (?, ?)";     jdbcTemplateObject.update( SQL, name, age);System.out.println("Created Record Name = " + name + " Age = " + age);return;}public Student getStudent(Integer id) {String SQL = "select * from Student where id = ?";Student student = jdbcTemplateObject.queryForObject(SQL, new Object[]{id}, new StudentMapper());return student;}public List<Student> listStudents() {String SQL = "select * from Student";List <Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());return students;}public void delete(Integer id){String SQL = "delete from Student where id = ?";jdbcTemplateObject.update(SQL, id);System.out.println("Deleted Record with ID = " + id );return;}public void update(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;}
}

(6)编写对应的Beans.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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd "><!-- Initialization for data source --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="1234"/></bean><!-- Definition for studentJDBCTemplate bean --><bean id="studentJDBCTemplate" class="com.tutorialspoint.StudentJDBCTemplate"><property name="dataSource"  ref="dataSource" />    </bean></beans>

(7)编写MainApp.java并运行

package com.tutorialspoint;
import java.util.List;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");StudentJDBCTemplate studentJDBCTemplate = (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");    System.out.println("------Records Creation--------" );studentJDBCTemplate.create("Zara", 11);studentJDBCTemplate.create("Nuha", 2);studentJDBCTemplate.create("Ayan", 15);System.out.println("------Listing Multiple Records--------" );List<Student> students = studentJDBCTemplate.listStudents();for (Student record : students) {System.out.print("ID : " + record.getId() );System.out.print(", Name : " + record.getName() );System.out.println(", Age : " + record.getAge());}System.out.println("----Updating Record with ID = 2 -----" );studentJDBCTemplate.update(2, 20);System.out.println("----Listing Record with ID = 2 -----" );Student student = studentJDBCTemplate.getStudent(2);System.out.print("ID : " + student.getId() );System.out.print(", Name : " + student.getName() );System.out.println(", Age : " + student.getAge());      }
}

运行结果如下:

数据表数据由无变为有:

转载于:https://www.cnblogs.com/youcong/p/9460819.html

Spring(十二)之JDBC框架相关推荐

  1. 《Dreamweaver CS6 完全自学教程》笔记 第十二章:框架的应用

    文章目录 第十二章:框架的应用 12.1 创建框架或框架集 12.1.1 创建自定义框架 12.1.2 创建预定义框架 技术专题:框架的拆分与合并 12.1.3 创建嵌套框架 12.2 框架和框架集的 ...

  2. 第十二章 Django框架

    第十二章 Django框架 tcp/ip五层模型 应用层 传输层 网络层 数据链路层 物理层 socket : 套接字,位于应用层和传输层之间的虚拟层,是一组接口 c/s架构 ------> b ...

  3. 十二.激光SLAM框架学习之livox-loam框架安装和跑数据集

    专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...

  4. Java基础(三十二)JDBC(2)连接数据库

    一.连接数据库的过程 连接数据库的过程:加载数据库驱动程序,不过只需在第一次访问数据库时加载一次,然后在每次访问数据库时创建一个Connection实例,然后执行操作数据库的SQL语句,并返回执行结果 ...

  5. Struts2(十二)使用验证框架验证数据较验

    一.数据验证 1.1.为什么要进行数据验证 对数据的合法性进行检查,只允许合法的数据进入应用程序 1.2.在哪里实现数据验证 客户端验证: 数据提交前在客户端验证 可使用JavaScript或者JQu ...

  6. 六十二、基础框架(二十)集合物件

    集合  是  由若干独一无二的物件  构成的.集合  可以是  可修改的,也可以是  不可修改的.我们  可以  在集合当中  搜索  某个物件.添加  或者  去除  某个物件,我们  还可以比较 ...

  7. Python学习十二:Flask框架

    文章目录 一.Flask 简介 1.1 安装虚拟环境 1.1.1 安装Virtualenv 1.1.2 创建虚拟环境 1.1.3 激活虚拟环境 1.2 安装Flask 1.3 第一个Flask 二.F ...

  8. 微软出品自动化神器【Playwright+Java】系列(十二)测试框架的设计与开发

    一.前言 大家好,我是六哥! 又有好长一段时间没更文了,不是我懒,而是确实在更文上,没有以前积极了,这里是该自我检讨的. 其实不是我不积极,而是相对更文学习来说,优先级不是最高. 对我而言,目前最重要 ...

  9. Android核心分析之二十二Android应用框架之Activity

    3 Activity设计框架 3.1 外特性空间的Activity    我们先来看看,android应用开发人员接触的外特性空间中的Activity,对于AMS来讲,这个Activity就是客服端的 ...

最新文章

  1. 解决Vue刷新一瞬间出现样式未加载完或者出现Vue代码问题
  2. 关于React面试题汇总
  3. Android入门:实现一个File存储的辅助类
  4. 【转】c++重载、覆盖、隐藏——理不清的区别
  5. 八种ADSL接入情况中断流现象分析
  6. 金陵科技学院计算机系男女比,眼已亮瞎:719所全国高校男女比例排名
  7. css碎步测量,CORS系统控制点点位可靠性研究.doc
  8. powerDesigner 把name项添加到注释(comment),完美方案!
  9. jenkins sonar配置
  10. linux libimf.so,如何安装Linux版FLOW-3D及注意事项
  11. Oracle数据的导入导出
  12. java 浏览文件_Java浏览文件对话框
  13. Android-- bionic介绍
  14. Rsync 实现远程同步
  15. 智慧环卫车辆监控管理系统方案
  16. Frank计算机基础硬件笔记
  17. setcpu_SetCPU中文版
  18. 基于PC的机器视觉系统设计
  19. 邮箱如何撤回已发送的邮件?
  20. Kepware通过网络配置三菱FX5U型号PLC的方法

热门文章

  1. RHEL 5.4 安装Oracle 11gR2, 准备篇...
  2. 图:DFS(深度优先搜索)图解分析代码实现
  3. 3a算法 isp_Isp图像算法工程师
  4. express与mysql数据库_express无法连接到mysql数据库
  5. python中pyecharts模块全局配置_python中pyecharts模块的使用示例
  6. 【干货】Oracle数据库常用十一大操作指令
  7. 网络好不好,ping一下就知道
  8. php发送sql,php发送Sql语句遇到的坑
  9. arcgis java api_Arcgis API For Javascript下载与安装
  10. 涂鸦智能 dubbo-go 亿级流量的实践与探索