Spring Data、Spring Data JPA 和 MyBatis 的关系

1. Spring Data

Spring Data 是 Spring 框架的一个子项目,它的核心目标是简化数据持久化层的开发,不论你是使用关系型数据库还是 NoSQL(非关系型数据库),Spring Data 都提供了统一的、易于使用的 API 来进行操作。它通过抽象底层的具体数据存储细节,使得开发者不需要关心数据库的类型或具体的 SQL 操作,只需专注于业务逻辑。

关键特点

  • 统一接口:Spring Data 提供了一个统一的接口(Repository),无论你使用的是 MySQL、PostgreSQL 这样的关系型数据库,还是 MongoDB、Redis 这样的 NoSQL 数据库,Spring Data 都能够通过相同的 API 来访问它们。
  • 自动生成 CRUD 操作:Spring Data 提供了 CrudRepositoryJpaRepository 等接口,开发者只需要继承这些接口,Spring Data 就会自动生成常见的 CRUD(创建、读取、更新、删除)操作,而无需手写 SQL。

Spring Data 支持的数据库类型

  • 关系型数据库:通过 Spring Data JPA、Spring Data JDBC 等支持 MySQL、PostgreSQL、Oracle 等数据库。
  • NoSQL 数据库:通过 Spring Data MongoDB、Spring Data Redis 等支持 MongoDB、Cassandra、Redis 等数据库。

关系型数据库与 NoSQL 数据库

关系型数据库是一类特定的数据库类型,适合处理有固定结构和关系的复杂数据。数据库分为 关系型非关系型(NoSQL),它们适用于不同的场景。 

关系型数据库 是一种基于表格(行和列)结构来存储数据的数据库。它使用 SQL(结构化查询语言) 来查询和操作数据,数据存储在表中,并且表之间可以通过外键等方式建立关系。

  • 特点
    • 数据严格按照行和列的结构存储。
    • 通过主键、外键等实现表之间的关联。
    • 支持事务、数据一致性和 ACID(原子性、一致性、隔离性、持久性)特性。
  • 常见的关系型数据库
    • MySQL:开源、免费,常用于中小型项目。
    • PostgreSQL:功能丰富,支持复杂查询和数据类型。
    • Oracle:大型企业常用,支持高并发和海量数据处理。
    • SQL Server:微软开发的关系型数据库,常用于企业内部应用。

NoSQL(非关系型数据库):是一种不使用固定表结构的数据库,适用于大数据和灵活的存储需求。NoSQL 数据库不强制数据之间的关系,允许存储非结构化或半结构化数据。

  • 特点
    • 不使用固定的表结构,数据存储更灵活。
    • 支持大规模的数据存储和快速查询。
    • 没有严格的 ACID 特性,但可以在分布式系统中更好地扩展。
  • 常见的 NoSQL 数据库
    • MongoDB:文档型数据库,数据以 JSON 格式存储,适合快速开发和大规模数据处理。
    • Redis:键值存储数据库,适用于缓存和高性能读写操作。
    • Cassandra:分布式 NoSQL 数据库,适用于大规模的写入密集型应用。 

2. Spring Data JPA

Spring Data JPASpring Data 项目下的一个具体实现模块,专门用来简化操作 关系型数据库 的持久层开发。它基于 JPA(Java Persistence API) 规范,允许开发者通过对象-关系映射(ORM)的方式操作数据库,不需要直接编写 SQL 语句。

JPA 本身是 Java 的一种ORM规范( Object Relational Mapping   Java中的对象与数据库语句SQL的映射关系),而 Spring Data JPA 就是 Spring 提供的一个框架,用于简化 JPA 的使用。

主要用于操作像 MySQLPostgreSQLOracle 等关系型数据库。

工作特点

  • ORM(对象关系映射):Spring Data JPA 使用 ORM 的方式将 Java 对象映射到数据库表。例如,一个 Java 类可以对应数据库中的一个表,类的字段对应表的列。JPA 的实现(如 Hibernate)会负责生成 SQL 语句并执行查询。
  • 自动化:Spring Data JPA 自动化了很多常见的操作,比如查找、分页、排序等,这极大简化了关系型数据库操作的复杂性。

3. MyBatis

MyBatis 是一个独立于 Spring 的持久层框架,它与 JPA 不同,它允许开发者直接编写 SQL 语句来操作数据库。与 Spring Data JPA 相比,MyBatis 提供了更大的灵活性,适合那些需要精确控制 SQL 执行的场景。

工作特点

  • 手写 SQL:与 JPA 不同,MyBatis 不会自动生成 SQL,所有的查询语句都由开发者自己编写。这样做的好处是,你可以完全控制 SQL 语句,确保优化查询、减少性能开销。
  • SQL 映射文件:MyBatis 使用 XML 文件或者注解的方式来将 SQL 语句与 Java 方法进行映射。开发者可以在映射文件中定义具体的 SQL 查询语句,并且可以使用动态 SQL 来根据条件生成不同的查询。
  • 灵活性高:对于那些复杂的查询和性能要求非常高的场景,MyBatis 提供了极大的灵活性。你可以针对不同的查询场景进行手动优化,比如优化连接查询、多表查询等。
  • 集成:MyBatis 可以通过 mybatis-spring 集成到 Spring 项目中,利用 Spring 提供的事务管理、依赖注入等功能,但它与 Spring Data JPA 是不同的技术栈。

  4. Spring Data JPAMyBatis的对比

 Spring Data JPAMyBatis 都是用来操作 关系型数据库 的技术,但方式不同:Spring Data JPA 基于 ORM 自动生成 SQL,MyBatis 允许手写 SQL。

对比项Spring Data JPAMyBatis
抽象层次高度抽象,基于 JPA 规范,减少手写 SQL低抽象,直接编写 SQL,灵活性高
开发效率开发效率高,自动生成 CRUD 操作需要手动编写 SQL,开发效率相对较低
复杂查询支持支持 JPQL 和 Criteria API,适合动态查询,但不够灵活手写 SQL,灵活性高,适合复杂查询
性能在批量操作和复杂查询时性能较低性能优越,特别是在复杂查询和大数据量场景下
事务管理与 Spring 集成良好,支持自动事务管理可以与 Spring 集成,但事务管理相对复杂
学习曲线学习曲线陡峭,特别是 JPA 规范的理解学习曲线较平缓,更贴近传统数据库操作
代码量自动生成代码,减少手动编写 SQL,代码量少需要手动编写 SQL,代码量较多
适用场景适合标准化 CRUD 操作、微服务架构、中小型项目适合高性能需求、复杂查询场景、对 SQL 控制要求高的项目
与 Spring 生态集成与 Spring Boot、Spring Security 等无缝集成可以集成,但需要额外配置

5.总结

Spring Data 是一个通用的数据访问框架,提供了对多种数据库类型(关系型和非关系型)的统一支持。

Spring Data JPA 是 Spring Data 下专门为 关系型数据库 提供的实现,通过 JPA 规范来简化对数据库的操作。

MyBatis 虽然也能操作 关系型数据库,但它并不是 Spring Data 生态的一部分,它提供的是另一种手写 SQL 的方式,适合对 SQL 执行有精确控制需求的项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1543940.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

DANN GRL

域自适应是指在目标域与源域的数据分布不同但任务相同下的迁移学习,从而将模型在源域上的良好性能迁移到目标域上,极大地缓解目标域标签缺失严重导致模型性能受损的问题。 介绍一篇经典工作 DANN : 模型结构 在训练阶段需要预测如下两个任务…

langchain的构成

1.简介 langchain的构成其包含langchain-core,langchain-community,langchain,langgraph,langserve,langSmith。 2,构件的详解 ‌LangChain Core‌ ‌LangChain Core‌是LangChain框架的核心组成部分,它包含了不同组件的基本抽象以及将它们组合在一起…

【每天学个新注解】Day 4 Lombok注解简解(三)—@NonNull

我们在之前的三天学了Lombok常用的注解: 【每天学个新注解】Day 1 Lombok注解简解(〇)—Getter、Setter、ToString、EqualsAndHashCode、Constructor 【每天学个新注解】Day 2 Lombok注解简解(一)—Data、Build、Value…

Kubernetes调度单位Pod

Kubernetes调度单位Pod 1 Pod简介 不直接操作容器container。 一个 pod 可包含一或多个容器(container),它们共享一个 namespace(用户,网络,存储等),其中进程之间通过 localhost 本地…

iOS 巨魔技巧:一键汉化巨魔商店

嘿,这是黑猫。iOS 巨魔商店一直都有个严重的问题:界面纯英文,不支持简体中文。 当然了,在IT行业,英语是通用语言。但是,既然巨魔/越狱面向普罗大众的技术,那么做好语言适配,还是很关…

idea插件开发系列1-环境搭建

前言 还记着10多年前有幸接触了eclipse插件开发,10多年后的今天有开发了idea的插件,真是一个轮回! 为什么要学习idea插件开发呢? 目前公司使用自己的MVC框架,没有相应的idea插件支持(如类似mybatis插件可…

Redis简单介绍与安装应用

在当今的互联网时代,数据的快速存取和处理变得至关重要。Redis,作为一种高性能的键值存储系统,已经成为许多开发者和企业的首选。本文将简要介绍Redis的基本概念、工作原理以及其在实际应用中的一些典型用例。 一、简介 1)概念 …

centos7 docker部署nacos

1. 一行代码安装git yum -y install git 2. 下载最新版nacos源码: git clone https://github.com/nacos-group/nacos-docker.git 进入nacos-docker文件 cd nacos-docker 3.docker安装数据库Mysql8 按这个来就行,非常好 Docker安装mysql8-超详细、每…

记某学校小程序漏洞挖掘

前言: 遇到一个学校小程序的站点,只在前端登录口做了校验,后端没有任何校验,奇葩弱口令离谱进去,站点里面越权泄露敏感信息,接管账号等漏洞!!! 渗透思路 1.绕过前端 …

docker 创建showdoc服务 showdoc容器部署教程

1. 下载最新版本镜像 # 按照最新版本 docker pull star7th/showdoc 2. 创建映射文件夹: # 创建文件夹 mkdir -p /data/showdoc_data# 可写权限 chmod 777 /data/showdoc_data 3.创建容器命令: docker run -d --name showdoc --userroot --privileged…

DoppelGanger++:面向数据库重放的快速依赖关系图生成

doi:DoppelGanger: Towards Fast Dependency Graph Generation for Database Replay,点击前往 文章目录 1 简介2 架构概述3 依赖关系图3.1 符号和问题定义3.2 无 IT(k) 图3.3 无 OT 图表3.4 无 OTIT 图表3.5 无 IT[OT] 图表3.6 输出确定性保证 4 重复向后…

go-admin-ui的菜单分割线设计思路和代码实现

在菜单管理添加分割线&#xff0c;类似这种&#xff1a; 思路&#xff1a;利用空间结构和数据特点来唯一区分出分割线&#xff0c;来划分业务区域 <template><div><h1>Split Line Controller</h1><ul><li v-for"route in displayedRout…

Thinkphp5x远程命令执行 靶场攻略

环境配置 靶场&#xff1a;vulhub/thinkphp/5-rce docker-compose up -d #启动环境 漏洞复现 1.访问靶场&#xff1a;http://172.16.1.198:8080/ 2.远程命令执⾏ POC&#xff1a; ?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system…

网安新声 | 黎巴嫩BP机爆炸事件带来的安全新挑战与反思

网安加社区【网安新声】栏目&#xff0c;汇聚网络安全领域的权威专家与资深学者&#xff0c;紧跟当下热点安全事件、剖析前沿技术动态及政策导向&#xff0c;以专业视野和前瞻洞察&#xff0c;引领行业共同探讨并应对新挑战的策略与可行路径。 9月17日&#xff0c;黎巴嫩境内发…

项目实战:lngress搭建Nginx+WP论坛+MariaDB

1. 网站架构 本次部署形式完全舍弃 Docker&#xff0c;将所有应用都置于Kubernetes&#xff0c;采用 Deployment 而非单 Pod 部署&#xff0c;稳定性得到升级。 2. 部署 MariaDB [rootk8s-master ~]# mkdir tdr [rootk8s-master ~]# cd tdr/ &#xff08;1&#xff09;定义 …

YOLOv8改进,YOLOv8添加STA注意机制(超级令牌注意力机制,CVPR2023),并二次创新C2f结构,助力涨点

改进前训练结果: 改进后训练结果: 摘要 在Transformer架构引入“超级令牌”(Super Token)的机制,旨在解决浅层网络中过多冗余的局部特征捕捉问题。传统的Transformer在捕捉长程依赖性方面表现出色,但在浅层网络中,由于局部特征冗余,导致了计算效率的低下。为了解决…

Nginx基础详解1(单体部署与集群部署、负载均衡、正反代理、nginx安装)

本阶段的任务 1.学会集群的操作概念 2.完成对Nginx的入门操作 3.使用Nginx实现集群和负载均衡 4.使用Nginx实现高可用的方案 目录 1.单体部署与集群部署 1.1单体部署的概念 1.2单体部署的优缺点 1.3集群部署的概念 1.4集群部署的优缺点 1.5集群部署需要注意的点 1.…

基于Springboot共享充电宝管理系统JAVA|VUE|SSM计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

CSS的弹性盒子模型(Flex box)

弹性盒子模型是CSS3的一种新的布局模式&#xff0c;弹性盒是一种当页面需要适应不同的屏幕大小以及设备类型时确保拥有合适的布局方式&#xff0c;引入弹性盒子模型的目的时提供更加有效的方式来对一个容器中的子元素进行排列&#xff0c;对齐和分配空白空间。 弹性盒子由弹性容…

玄机靶场--蚁剑流量

木马的连接密码是多少 黑客执行的第一个命令是什么 id 黑客读取了哪个文件的内容&#xff0c;提交文件绝对路径 /etc/passwd 黑客上传了什么文件到服务器&#xff0c;提交文件名 黑客上传的文件内容是什么 黑客下载了哪个文件&#xff0c;提交文件绝对路径 蚁剑流量特征总结 …