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. 魅族员工哀叹把青春献给了公司,当年如果选择小米,人生会不一样
  2. 重磅,2020年度第十届吴文俊人工智能科学技术奖获奖名单公示
  3. 你大概走了假敏捷:认真说说敏捷的实现和问题(手绘版)
  4. 善于使用这个filter来减少mac系统找未读邮件的烦恼
  5. .gitignore文件_Java小白入门,Git忽略文件.gitignore详解
  6. android继承图,Android图形系统(三)-View绘制流程
  7. julia :谈循还,row 与 col who first?
  8. Python原来有三大神器
  9. 使用Cisco Packet Tracer 搭建网络
  10. 动态规划和分治法解合唱队形问题
  11. 曼哈顿算法公式_曼哈顿最小距离算法
  12. 用anaconda下载安装pytorch1.8.1+cudatoolkit11.1
  13. Android webview Input type=file 文件上传 解决方法
  14. 地图开发技术报告(百度地图)
  15. Github Actions Self-Hosted 本地运行Actions
  16. 最小公共子串——力扣
  17. Shardingsphere的分库分表+读写分离+分页条件查询
  18. 注册表编辑器被改这样恢复
  19. DM DISQL使用
  20. LeetCode 314 周赛

热门文章

  1. 子查询中的空值导致的问题。
  2. linux shell获取字符串第1个字符
  3. tomcat配置文件server.xml详解
  4. android unity hook,[原创]Unity3d安卓游戏DLL动态调式与HOOK基础
  5. catia目录编辑器使用教程_如何去编辑数学公式?公式编辑器使用教程
  6. 国内唯一,阿里云容器服务进入 Forrester 领导者象限
  7. 阿里大规模业务混部下的全链路资源隔离技术演进
  8. 在阿里,我们这样帮助用户实现业务云原生化迁云
  9. 计算机视觉应用的简称,计算机视觉应用之图像检索任务简单介绍
  10. mysql5.7+主从不一致_Mysql5.7安装错误处理与主从同步及!