Jpa VS MyBatis,你用哪个?
===
JPA是什么
Java Persistence API:用于对象持久化的 API
Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层

JPA和Hibernate的关系
JPA 是 Hibernate 的一个抽象(就像JDBC和JDBC驱动的关系);
可以说JPA是一种规范体系,在本质上属于ORM的技术规范;然而它并不是一个ORM框架软件因为它本身不具备ORM功能而是制定了相应的技术规范并提供了编程接口这些接口的具体实现则由相关的ORM厂商进行开发和维护;
Hibernate 是实现:Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现
从功能上来说, JPA 是 Hibernate 功能的一个子集
JPA的供应商
其中一个目标是开发一个多供应商可兼容的API接口。这些技术包括Hibernate版本3.2及以上、TopLink版本10.1及以上以及OpenJPA均支持基于JavaPlatform(JPA)的标准实现。基于上述标准接口的技术架构下往往涉及多种主流框架与工具。
1.Hibernate
JPA 的始作俑者就是 Hibernate 的作者,Hibernate 从 3.2 开始兼容 JPA。
2.OpenJPA
OpenJPA 是 Apache 组织提供的开源项目。
3.TopLink
TopLink 以前需要收费,如今开源了。
4.EclipseLink
JPA的优势
标准化: 遵循统一的API规范, 这一做法确保了基于JPA的企业应用只需进行少量改动即可适应不同的JPA框架.
易于使用且集成便捷: JPA 的主要目标之一是提供一个更为简洁的编程架构,在JPA框架下生成实体与构建Java类具有同等的简便性;仅需在生成实体时标注$javax.persistence.Entity;从架构角度来看,JPA的所有组件都设计得极为简洁明了。
其查询性能与 JDBC 接近: JPA 的查询语言是基于面向对象编程语言设计的,它定义了一种独特的 JPQL 语法,不仅还能够支持批量更新和修改以及常见的连接类型如 JOIN 和分组操作等,这些功能即使在传统的 SQL 语言中也只有通过复杂的脚本才能实现,而且还可以嵌套执行子查询操作
支持面向对象的复杂特性: JPA中具备丰富的面向对象特性,包括继承、多态以及复杂的关联关系等多种类型,尽可能地采用面向对象建模的方式进行设计与开发
…
JPA包含的技术
ORM中的元数据映射机制:基于JDK 5.0的XML注解与JPA一起构成了描述对象属性与数据库表字段间对应关系的基础框架。通过描述对象属性与数据库表字段间的对应关系…从而实现对实体对象的数据持久化存储于数据库表中。
JPAAPI:用于管理实体对象,并支持 CRUD 操作;由框架来处理各种事务;使开发者无需直接处理 JDBC 和 SQL 语法。
在持久化操作中占据重要地位的一个方面是 JPQL(Java Persistence API Query Language)这种面向对象而非面向数据库的数据查询语言的应用。其核心理念是以防止程序与具体的 SQL 之间产生紧密联系的目的,在数据层面实现对象与关系型数据库之间的自然映射,并通过这种机制简化业务逻辑的实现过程。
MyBatis
=======
什么是 MyBatis
MyBatis 也是一个Java领域中的持久化工具,在开发过程中可以通过XML描述符或Annotation机制将Java对象与其对应的数据库操作建立关联。与大多数基于对象关系映射(ORM)的框架不同的是,并不是直接将Java对象与其对应的数据库表建立联系,而是通过定义Java方法来绑定SQL语句的操作。这种设计赋予开发者全面控制数据库功能的能力,并非仅仅关注于简单的数据存取操作。实际上,在使用MyBatis时最令人印象深刻的地方就是完全掌控SQL执行过程的能力
与JDBC相比,在操作查询结果映射方面MyBatis更加简化:一条SQL指令可以在一行代码中轻松执行。该技术通过内建的映射引擎实现了将SQL指令执行结果与其对象架构之间的关联。采用一种内置的XML表达式语言或集成Apache Velocity插件的方式即可动态生成SQL指令;这些特性使得开发者能够更加便捷地利用该技术进行开发操作。此外MyBatis还支持声明式的数据缓存功能:当一条SQL指令被标记为"可缓存"时首次运行该指令所获取的所有数据库记录会被存储在一个高速缓存区中;在此后对该指令重复运行时系统会直接从缓存区读取数据而不必再次访问数据库。
言尽于此,完结
无论是刚入行的新手开发者、资深开发者还是高水平的设计架构师都应该深刻认识到设计模式的价值和意义
- 第一,设计模式能让专业人之间交流方便,如下:
程序员A:这里我用了XXX设计模式
程序员B:那我大致了解你程序的设计思路了
- 第二,易维护
项目经理:今天客户有这样一个需求…
程序员:明白了,这里我使用了XXX设计模式,所以改起来很快
- 第三,设计模式是编程经验的总结
程序员A:B,你怎么想到要这样去构建你的代码
程序员B表示,在他习得了XXX设计模式之后,在他使用过程中似乎自然而然地就能写出这样的代码来避免出现一些问题
- 第四,学习设计模式并不是必须的
程序员A:B,你这段代码使用的是XXX设计模式对吗?
程序员B:没关系的,请原谅我未曾接受过设计模式的学习经历;但我的实践经验告诉我就是这样的。

系统地从设计思想出发解析开源框架;逐步深入学习包括Spring、Spring5、SpringMVC和MyBatis在内的源码解析;我已经系统地收集整理了全套相关资料;考虑到篇幅限制;这部分对23种常见设计模式进行了深入的介绍;并附上了详细的文件清单(如图所示)
系统地从设计思想出发解析开源框架;
逐步深入学习包括春
sprint 4
spring framework
spring framework 5
spring mvc
mybatis在内的源码解析;
我已经系统地收集整理了全套相关资料;
考虑到篇幅限制;
这部分对二十多种常见设计模式进行了深入的介绍;
并附上了详细的文件清单(如图所示)

搜集费时费力,能看到此处的都是真爱!
基于设计思想深入解析开源框架, 逐步深入地解析了这些关键框架的源码, 我已系统地收集整理了全部, 篇幅较为有限, 这部分则全面阐述了共计23种典型的设计模式, 具体参考材料如图所示!
[外链图片转存中…(img-zVCkcUCq-1719277449538)]
搜集费时费力,能看到此处的都是真爱!
