Spring Boot 实战- Spring Data 数据访问 MySQL|学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 快速学习 Spring Boot 实战- Spring Data 数据访问 MySQL。

开发者学堂课程【Spring Boot 2.5.x 开发实战Spring Boot 实战- Spring Data 数据访问 MySQL】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/853/detail/14069


Spring Boot 实战- Spring Data 数据访问 MySQL

 

Spring Data 简化 MySQL 数据访问

 

(一)Spring Data 新特性

Spring  Spring boot 之后应用开发、微服务架构以及数据链接上都提供了专门的框架,大大简化开发工作,提升开发的效率。

Spring Data for MySQL 有很多技术可以使用,比如 JDBC、JDBC Template、RM 框架或者 Hibernate My Business。

Spring Data 会整合框架,简化整个框架的配置。这里面有个非常重要的 Spring Data 的子集叫 JPA,实际就是加上了一个持久化的 API,它其中有一块针对 MySQL 封装底层的 Hibernate,也可以切换成 My BusinessMy Business 的替换也可以实现,使用默认的操作。

• Spring Data 新特性

1. 快速数据访问框架,提供统一的编程模型  

2. 强大的 repository 仓储和自定义对象映射 ORM 抽象  

3. 从 repository 方法名称派生动态查询接口  

4. 实现 Domain 域基类提供基本属性  

5. 支持透明审计日志(创建,最后更改)  

6. 可以自定义 repository 代码  

7. 通过 JavaConfig 和自定义 XML 命名空间轻松实现 Spring 集成  

8. 与 Spring MVC 控制器的高级集成  

9. 跨库持久性的实验支持

Spring Data 针对各个数据源提供了统一的编程模型,其中有一个设计模式叫仓储模式,仓储模式在数据访问层又做了一层封装,主要针对各种不同的数据库提供统一的操作,有些默认接口增删改查直接生成不用再进行配置了。这个操作也可以结合其他的分层模型来进行整合。注意并不排除其他设计模式,整个开发架构综合各种设计模式、框架。注意后面对应的配置的操作可以给大家讲解、演示代码,方便大家在整个学习过程中逐步迭代。

 

(二)Spring Data 架构

Spring Data 主要是做各种不同的数据源的对接工作。有传统的关系型数据库也有非关系型数据库等等都可以和它进行集成。

Spring Data 架构主要分成了关系型数据库和关系型数据库。JPA 底层使用 JDBC 对关系型据库的一系列操作,后面对于访问 Redis 

MongoDB 后续课程也有对应的实战案例。

 

(三)Spring Data 核心模块

1. Spring Data Commons - 支持每个 Spring Data 模块的 Core Spring 概念。

2. Spring Data JDBC - 对 JDBC  Spring Data 存储库支持。

3. Spring Data JDBC Ext - 支持标准 JDBC 的数据库特定扩展,包括对 Oracle RAC 快速连接故障转移的支持,AQ JMS 支持以及对使用高级数据类型的支持。

4. Spring Data JPA - JPA  Spring Data 存储库支持。

5. Spring Data Key Value - 基于映射的存储库和 SPI,可轻松构建用于键值存储的 Spring Data 模块。

6. Spring Data LDAP - 对 Spring LDAP  Spring Data 存储库支持。

7. Spring Data MongoDB - 基于 Spring 的对象文档支持和MongoDB 的存储库。

8. Spring Data Redis - 从 Spring 应用程序轻松配置和访问Redis。

9. Spring Data REST - 将 Spring Data 存储库导出为超媒体驱动的 RESTful 资源。

10. Spring Data Apache Cassandra - 轻松配置和访问 Apache Cassandra 或大规模,高可用性。

11. Spring Data Apache Geode - 轻松配置和访问 Apache Geode。

12. Spring Data Apache Solr - 为面向搜索的 Spring 应用程序轻松配置和访问 Apache Solr。

13. Spring Data Pivotal GemFire - 轻松配置和访Pivotal GemFire。

 

(四)Spring Boot2.5实战 MySQL

1. Spring JDBC and JdbcTemplate  

2. Spring Data JPA and Hibernate framework  

3. Spring Data 简化连接不同的数据库  

4. 使用 Spring Data JPA 框架连接 MySQL  

5. 当然也可以使用原始的 JDBC  

6. 默认底层使用 Hibernate 框架  

7. 支持 Repository 仓储模式  

8. 引入最重要的2个包  

9. spring-boot-starter-data-jpa  

10. mysql-connector-java

JPA 默认一个 RM 框架叫 Hibernate 框架。我们在对接的时候,需要大家去引几个包。作为 Spring boot 严格来说是有个傻瓜式编程,要简化配置。但是我们手动引入一个叫 JDBC 的包,然后再去配置数据库链接参数,数据库地址以及用户密码这些参数还是要自己设置。

对于初始化依赖,可以使用 starter-data-jpa 这样的一个依赖包。这里面还涉及到 JdbcTemplate,这是 Spring 提供了一个非常重要的数据库操作的接口。

 

(五)Spring Data JPA 框架

•Spring Data JPA 简化数据访问层的开发工作

•基于 Spring和JPA 构建存储库的完美支持

•支持 Querydsl 谓词,从而支持类型安全的 JPA 查询

•Domain 类的透明审核

•分页支持,动态查询执行,集成自定义数据访问代码的能力

•在引导时验证@Query 带注释的查询

•支持基于 XML 的实体映射

•引入@EnableJpaRepositories,基于 JavaConfig 的存储库配置。

自定义了一个 Querydsl 语言,Domain 针对数据库操作提供了查询的领域语言,该语法类 SQL 。

在定义接口的时候,特殊的查询可能需要编写一些特殊的语句,下面来看一下具体的一个实现。

image.png

对项目进行改造,改造要加入新的引用,除了 Web 引用,加入数据库访问链接,这里面有个 spring data starter 的JPA。加进来以后我们从数据库底层手动引一下 MySQL-connector链接驱动,里面 devtools 主要做自动化调试,方便进行程序的开发配置。改完代码以后不用重启,就会自动重新加载变化的数据配置文件。

代码的实现,需要配 Spring Data 对应的数据源,用户名密码,数据库,在本地要安装一个 MySQL 的数据库,我这里先建立一个叫阿里巴巴,然后直接有一个表,这个表有很简单的几个字段,用户名密码,姓名,年龄,城市,地址,前面是 ID 就三条数据,主要用来测试。

我们主要是看代码,代码数据库需要几个重要的参数 url ,username  password如果有多语言设置的,稍微注意编码以及 uesSSL 的警告驱动要指定新版本的这个驱动的名字老版本的可能会有点变化

Database-platform 这里面就是直接看一下然后后面的话就是简单的分成了控制器比如增删改查的控制器和数据库直接对应Model 的话没做详细的,正常的话,model 应该和实体不一样。Query 语言这个语法和 SQL 是类似语法可以通过注解指定查语句,可以根据用户名,用户密码以及 id 进行查询,有时候这些在基础的增删改查中没有默认创建这些方法就比较方便在仓储模式直接指定了主件是什么类型一个用户一个 user 的一个类型控制器使用仓储的接口定义了一个仓的变量,用户的一个变量可以用来查询所有的用户,这接口就是属于获得所有的用户或者是用户返回客户端,不需要做复杂的配置

注意仓储层的仓储对象是个接口,比如个接口是自动注入使用的框架叫依赖注入,依赖注入底层,使用了反射包括对象创建以及依赖注入整个一系列过程。

代码很清晰,整个一个 Spring 平台容器帮助我们做了很多工作,注意严格模型可以再拆分,可以把实体和应用模型拆开,业务逻辑层也可以删掉,因为我们就是简单验证如何通过 Spring Boot 链接数据库

数据库中含有增删改查我们做查询,演示一下,可以看到 delete 删除删除所有,findAll 查询所有,getUserById getUserByName 等,除了自定义接口的方法属于自定义扩展方法,实际已经包括增删改查增删改查基本都实现了,只需做一些特殊的自定义的一些接口的一些配置,配置开发工作即可,Spring Data 能够简化底层的一个开发工作

可以看到加了 Spring Data 依 赖以后,除了 Spring Boot 正常的一个依赖,实际还有 HiKariCP这是属于这个链接,链接这样的一个很重要的一个组件,性能比较高,以及 starter-jdbc注意hibernate 用的是5.4.23版本。Spring Data 实际是做了再次的分装,接口自动化,增删改查都不用写

Spring Data JPA 是链接 MySQL 数据库重要的组件,在配置的时候要注意底层的 MySQL connection。

运行测试一下我们的项目,正常启动没有错误,打开浏览器,搜索localhost:8081/ Home/getAll 就能看到结果(三条测试数据)

image.png

image.png

注意 Spring Data JPA 是链接 MySQL 数据库非常重要的主件,配置时注意引入底层的 MySQL Connection 以及 JPA 主件。

Java高级面试题  

1. Spring Data JPA CRUD 增刪改查 REST API  

2. 如何基于 Spring Boot+Spring Data 实现登录注册?  

3. Spring Data 为什么只使用接口声明就可以访问数据库?  

4. 默认 Spring Data JPA 使用 Hibernate,如何配置连接池?

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
Java 关系型数据库 MySQL
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
102 43
|
19天前
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
41 6
|
1月前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
334 12
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
79 8
|
2月前
|
缓存 前端开发 Java
【Spring】——SpringBoot项目创建
SpringBoot项目创建,SpringBootApplication启动类,target文件,web服务器,tomcat,访问服务器
|
22天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
8天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
79 42
|
26天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
204 0
|
2月前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
72 3
|
2月前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
116 3