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。
演示示例如下:
(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框架相关推荐
- 《Dreamweaver CS6 完全自学教程》笔记 第十二章:框架的应用
文章目录 第十二章:框架的应用 12.1 创建框架或框架集 12.1.1 创建自定义框架 12.1.2 创建预定义框架 技术专题:框架的拆分与合并 12.1.3 创建嵌套框架 12.2 框架和框架集的 ...
- 第十二章 Django框架
第十二章 Django框架 tcp/ip五层模型 应用层 传输层 网络层 数据链路层 物理层 socket : 套接字,位于应用层和传输层之间的虚拟层,是一组接口 c/s架构 ------> b ...
- 十二.激光SLAM框架学习之livox-loam框架安装和跑数据集
专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...
- Java基础(三十二)JDBC(2)连接数据库
一.连接数据库的过程 连接数据库的过程:加载数据库驱动程序,不过只需在第一次访问数据库时加载一次,然后在每次访问数据库时创建一个Connection实例,然后执行操作数据库的SQL语句,并返回执行结果 ...
- Struts2(十二)使用验证框架验证数据较验
一.数据验证 1.1.为什么要进行数据验证 对数据的合法性进行检查,只允许合法的数据进入应用程序 1.2.在哪里实现数据验证 客户端验证: 数据提交前在客户端验证 可使用JavaScript或者JQu ...
- 六十二、基础框架(二十)集合物件
集合 是 由若干独一无二的物件 构成的.集合 可以是 可修改的,也可以是 不可修改的.我们 可以 在集合当中 搜索 某个物件.添加 或者 去除 某个物件,我们 还可以比较 ...
- Python学习十二:Flask框架
文章目录 一.Flask 简介 1.1 安装虚拟环境 1.1.1 安装Virtualenv 1.1.2 创建虚拟环境 1.1.3 激活虚拟环境 1.2 安装Flask 1.3 第一个Flask 二.F ...
- 微软出品自动化神器【Playwright+Java】系列(十二)测试框架的设计与开发
一.前言 大家好,我是六哥! 又有好长一段时间没更文了,不是我懒,而是确实在更文上,没有以前积极了,这里是该自我检讨的. 其实不是我不积极,而是相对更文学习来说,优先级不是最高. 对我而言,目前最重要 ...
- Android核心分析之二十二Android应用框架之Activity
3 Activity设计框架 3.1 外特性空间的Activity 我们先来看看,android应用开发人员接触的外特性空间中的Activity,对于AMS来讲,这个Activity就是客服端的 ...
最新文章
- 魅族员工哀叹把青春献给了公司,当年如果选择小米,人生会不一样
- 重磅,2020年度第十届吴文俊人工智能科学技术奖获奖名单公示
- 你大概走了假敏捷:认真说说敏捷的实现和问题(手绘版)
- 善于使用这个filter来减少mac系统找未读邮件的烦恼
- .gitignore文件_Java小白入门,Git忽略文件.gitignore详解
- android继承图,Android图形系统(三)-View绘制流程
- julia :谈循还,row 与 col who first?
- Python原来有三大神器
- 使用Cisco Packet Tracer 搭建网络
- 动态规划和分治法解合唱队形问题
- 曼哈顿算法公式_曼哈顿最小距离算法
- 用anaconda下载安装pytorch1.8.1+cudatoolkit11.1
- Android webview Input type=file 文件上传 解决方法
- 地图开发技术报告(百度地图)
- Github Actions Self-Hosted 本地运行Actions
- 最小公共子串——力扣
- Shardingsphere的分库分表+读写分离+分页条件查询
- 注册表编辑器被改这样恢复
- DM DISQL使用
- LeetCode 314 周赛
热门文章
- 子查询中的空值导致的问题。
- linux shell获取字符串第1个字符
- tomcat配置文件server.xml详解
- android unity hook,[原创]Unity3d安卓游戏DLL动态调式与HOOK基础
- catia目录编辑器使用教程_如何去编辑数学公式?公式编辑器使用教程
- 国内唯一,阿里云容器服务进入 Forrester 领导者象限
- 阿里大规模业务混部下的全链路资源隔离技术演进
- 在阿里,我们这样帮助用户实现业务云原生化迁云
- 计算机视觉应用的简称,计算机视觉应用之图像检索任务简单介绍
- mysql5.7+主从不一致_Mysql5.7安装错误处理与主从同步及!