在Java应用程序开发中,使用JDBC访问MySQL数据库是Java开发者常用的技术。在Spring框架中,Spring对JDBC又进行了封装,简化了程序访问数据库的复杂度。本课主要讨论在Spring框架中如何使用封装的JDBC访问MySQL数据库。通过本课的学习,可以解决如下问题。

● 在Spring框架下,如何让程序连接数据库?

● 如何利用DAO技术从数据源读取和写入数据?

企业级应用开发都会涉及到对数据库的访问,在Java编程环境中,访问数据库是非常繁琐的事情,需要编写启动数据库连接、准备和执行SQL语句、处理事务和异常、关闭连接等大量数据库操作代码。

使用Spring框架可以简化Java程序对数据库的访问,Spring提供了一套完整的数据库访问框架,用于简化各种数据库访问技术的使用。Spring框架支持JDBC、Hibernate、Java Perssitence等数据库访问技术,本文主要讨论JDBC数据库访问技术。

1、 配置数据源

要让Spring能够访问数据库,就要把数据库的位置,以及访问数据库的账号和密码告诉Spring。这个过程称为配置数据源。Spring提供了多种方式配置数据源,下面主要讨论基于JDBC驱动方式配置数据源。

Spring提供的JDBC驱动提供了三类数据源的配置方式,开发者可以根据程序需要选择不同的配置方式,配置方式及其配置说明如下表所示。

表1 JDBC驱动配置数据源方式

本课主要使用DriverManagerDataSource连接数据源,没有使用连接池技术。后面的课程会讨论数据库连接池技术。

数据源可以在Spring配置文件中进行配置,配置代码如下。

2、创建数据访问对象(DAO)

数据访问对象(DAO)相当于程序和数据源之间的经纪人。程序要访问数据源,必须要通过DAO来访问,DAO提供了程序访问数据源必要的接口和方法,接口和方法的具体实现细节,程序并不需要了解。

DAO由数据访问对象接口、数据访问对象实现类、访问对象实体类组成。其中,数据访问对象接口定义了访问数据必要的接口声明;数据访问对象实现类实现了定义的接口,并负责从数据源读取数据,数据源可以是数据库、XML文件或者是其它存储对象;访问对象实体类定义了要访问的对象结构,假设要访问的数据对象是数据库,则该实体类定义了数据库中一个表的结构。下面以访问数据库为例,分别讨论数据访问对象接口、数据访问对象实现类和访问对象实体类。

(1)数据访问对象接口

访问数据库的操作一般是增、删、改、查。增是在指定的数据库表中插入一条记录;删是在指定的数据库表中删除一条记录;改是在指定的数据库表中修改记录;查是按指定条件查询数据库表记录。数据访问对象接口就是定义操作数据库表的增删改查接口。下面给出课程案例mooc数据库course表的DAO接口。

课程案例mooc数据库ER图如下所示。

图 1 mooc数据库ER图

mooc数据库course表结构如下。

表 2 课程表

course表DAO接口代码如下。

(2)数据访问对象实现类

数据访问对象实现类实现DAO接口,并负责从mooc数据库中读取数据。在Spring中,可以采用JDBC、Hibernate、MyBits、JPA等技术在DAO层实现对数据库的访问。本科采用JDBC技术,JdbcTemplate类是Spring对JDBC的封装,让JDBC更加容易使用,JdbcTemplate 类可以执行 标准的SQL 语句和过程调用。数据访问对象实现类代码如下。

CourseJDBCTemplate类实现了CourseDao接口,并实现了接口的所有方法。CourseJDBCTemplate类内置了DataSource和JdbcTemplate类。DataSource为数据源类,存储了数据源的连接地址、登录数据源的账号密码等数据。JdbcTemplate类是Spring对JDBC的封装,JdbcTemplate 类可以执行 标准的SQL 语句和过程调用,创建JdbcTemplate类时传入的参数为DataSource。

代码中用到了JdbcTemplate类的queryForObject方法,该方法从数据库中查询符合条件的记录。queryForObject方法的第三个参数是RowMapper泛型类型,通过继承RowMapper泛型,可以将查询返回的ResultSet数据集映射到访问对象实体类。

(3)访问对象实体类

访问对象实体类定义了要访问的对象结构,假设要访问的数据对象是数据库,则该实体类定义了数据库中一个表的结构。mooc数据库course表的实体类代码如下。

3、运行JDBC的测试程序

前面主要讨论了配置数据源和创建数据访问对象(DAO)相关内容,解决了程序如何访问数据库以及数据库表的读写问题。下面给出一个程序实例,利用前面配置的数据源和已创建的DAO对象,实现对mooc数据库course表的课程插入和查询操作。

mooc数据库非常简单,可以根据课程给出的ER图和course二维表,手动创建mooc数据库和course表。mooc数据库创建完成后,需要修改Spring配置文件中配置的数据源,主要是修改数据库的连接地址、登录账户和密码。

运行程序前需要确定项目已经引入了Spring框架关于JDBC功能的jar包。下面列出的是spring 5.0版本相关JDBC的jar包。

● mysql-connector-java-5.1.7-bin

● spring-jdbc-5.0.8.RELEASE

测试程序代码如下。

程序运行结果如下图示所示。

课程小结

(1)要让Spring能够访问数据库,就要把数据库的位置,以及访问数据库的账号和密码告诉Spring,这个过程称为配置数据源。数据源可以在Spring配置文件中进行配置,也可以写成Bean的方式,由DAO对象读取。

(2)数据访问对象(DAO)相当于程序和数据源之间的经纪人。程序要访问数据源,必须要通过DAO来访问,DAO提供了程序访问数据源必要的接口和方法,接口和方法的具体实现细节,程序并不需要了解。DAO将底层数据操作细节和上层应用进行了有效隔离,在程序开发过程中,DAO和上层应用都可以独立编写代码,然后再进行集成就可以了,利用DAO层也可以轻松实现不同数据库的访问。

Spring使用JDBC访问MySQL数据库相关推荐

  1. SpringBoot 实战 (八) | 使用 Spring Data JPA 访问 Mysql 数据库

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 如题,今天介绍 Spring Data JPA 的使用. 什么是 Spring Data JPA 在介绍 Spri ...

  2. springdata和mysql_Spring Boot使用Spring Data JPA访问MySQL数据库

    它使用Spring Data JPA来访问数据库,但这只是众多可能选择中的一种(例如,您可以使用普通的Spring JDBC). mysql建立数据库,添加用户,并且授权 mysql> crea ...

  3. php访问mysql数据库实验报告,php访问mysql数据库

    //建一个连接,造一个连接对象 $db = new MySQLi("localhost","root","123","mydb&q ...

  4. JDBC连接MySQL数据库,访问数据库信息完成登录功能——保姆级详细教程(附所有java和jsp源代码)

    目录 前言 JDBC的介绍 通过JDBC连接MySQL数据库 导入mysql驱动 连接数据库 连接数据库 判断连接是否成功 使用数据库实现登录 获取前端表单的用户输入 判断用户名和密码为空 查询表 判 ...

  5. Spring Boot 2.x基础教程:使用Spring Data JPA访问MySQL

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | http://blog.di ...

  6. Springboot03整合SpringDataJPA访问MySQL数据库

    使用SpringBoot访问MySQL数据库,并且结合SpringDataJPA完成CRUD(Create,Read,Update,Delete 结合 Springboot01 中的demo案例 Sp ...

  7. Spring Security:基于MySQL数据库的身份认证

    本文来说下Spring Security:基于MySQL数据库的身份认证和角色授权 .本文为了上手简单,只用了一张user表. 文章目录 概述 创建项目 基于数据库的身份认证 本文小结 概述 需求缘起 ...

  8. jpa mysql_Spring boot通过JPA访问MySQL数据库

    本文展示如何通过JPA访问MySQL数据库. JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据 ...

  9. Springboot学习1——通过JPA访问MySQL数据库

    本文展示如何通过JPA访问MySQL数据库. JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据 ...

最新文章

  1. 不通过AppStore,在iOS设备上直接安装应用程序的原理
  2. Linux里su报错bash不是目录,Linux基础:关于su 命令的的几个相关报错
  3. OpenVZ,Xen,KVM等:虚拟化解决方案
  4. MyBatis3源码解析(1)探索准备
  5. php vm_facebook hiphop php vm 兑现概述(二)
  6. windows10开启Webdav文件服务
  7. OpenGL ES 送显 YUV NV12
  8. java 路径规划_应用内路径规划的简单实现
  9. java+毕业设计+进销存管理系统+源码+论文.rar
  10. 学习笔记【机器翻译评测指标】
  11. 征服面试官的50道Redis高频通关面试题
  12. css_radius-corner语法分析
  13. COMFORT 尊驾 | 内外兼修 全面进化
  14. js基础1 输入输出方式 数据类型
  15. 数码相机里的相片可以利用计算机,把数码相机里的照片上传到电脑上的方法
  16. Babylon.js 入门 - 第 6 章 - 构建粒子喷泉
  17. Pandas第三部分Day5练习题
  18. DAVINCI DM3730开发攻略——DVSDK4_03和双核CODEC机制介绍
  19. @font-face的format属性解释
  20. 编译原理 yacc lex 制作一个计算器

热门文章

  1. 一、SQL语法——4-数据库约束
  2. 面向对象 【类库】【委托】【is as运算符】
  3. netbean下搭建mariadb数据库
  4. v4l2视频采集摄像头
  5. java位运算(转)
  6. 第六届省赛(软件类)真题----Java大学C组答案及解析
  7. 由于没有远程桌面授权服务器可以提供许可证,远程会话被中断
  8. mysql 存储过程代码_MySQL存储过程及常用函数代码解析
  9. 智商情商哪个重要_《所谓逆商高,就是心态好》:逆商,比情商和智商更重要...
  10. 计算机网络系统系统设备配置,计算机网络系统技术方案及设备配置方案