java 持久化

名词大作战

什么是JPA

JPA(Java Persistence API )中文名Java持久层API,JPA通过注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。Hibernate3.2+、TopLink 10.1.3以及OpenJPA都提供了JPA的实现。

什么是 Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JaveEE架构中取代CMP,完成数据持久化的重任。

什么是Spring Data

Spring Data 是持久层通用解决方案,支持关系型数据库 Oracle、MySQL、非关系型数据库NoSQL、Map-Reduce 框架、云基础数据服务 、搜索服务。Spring Data 就是 Spring 官方提供一套数据层综合解决方案 !至此开发者唯一要做的,就只是声明持久层的接口其他都交给Spring Data JPA来帮你完成!

什么是Spring Data JPA

Spring Data JPA是Spring Data家族的一部分,该模块处理基于JPA的数据访问层的增强支持。这使得构建使用数据访问技术的基于Spring的应用程序更加容易。

什么是 MyBatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

什么是JDBC

JDBC(Java DataBase Connectivity)提供一种接口,它是由各种数据库厂商提供类和接口组成的数据库驱动,为多种数据库提供统一访问。我们使用数据库时只需要调用JDBC接口就行了。JDBC解决java系统与数据库建立连接、发送 操作数据库的语句并处理结果等问题。

PK

JPA VS JDBC

JDBC解决的是java系统与数据库底层联通性问题,实现了对不同数据库驱动的统一封装,已经sql语言交互和解析的标准语言。JPA解决的是java对象建模和持久化模型的映射,以及对持久化模型的相关操作语法。绝大多数JPA实现框架在底层上还是依赖JDBC与数据库交互,也就是说JPA并没有取代JDBC,而是提供了高阶的语法抽象。类比spring和java EE的关系,spring并没有取代JAVA,而是提供了更便捷的语法抽象。

JPA VS Hibernate

实现路径之争,正规军干不过造反派,最终选择收编造反派。JPA放弃了EJB2.0前提假设,借鉴了Hibernate解决方案边界,抽象出通用的API。同时Hibernate成为JPA的一个实现,且是最流行的实现方案。

JPA VS Spring Data

标准之争,学术派干不过实战派,最终实战派成为事实标准,官方标准被统筹。

MyBatis VS Hibernate

设计理念之争。MyBatis考虑的是ER数据存储驱动的系统设计流程,先有ER关系数据库存储模型,然后开发JAVA代码,controller-service-dao是标准的代码分层。前提假设为系统的复杂度与关注目标应该是数据存储与sql,使用传统重CRUD的业务系统开发,尤其适合有复杂查询的后台管理系统开发。与其说是一个ORM框架,不如说是SQL与java代码的转换工具。Hibernate考虑的是领域驱动架构,先有领域模型,然后才有数据持久层。从Hibernate(冬眠)的含义可以发现,Hibernate设计者认为数据存储只是实体Entity的一个临时状态,春天来了实体自然就苏醒了。其前提假设是系统的复杂度与关注目标应该是业务逻辑,持久化只是一个需要稍微处理一下的一个边界问题。

PK结论

Hibernate是JPA的一种实现;没有Hibernate,JPA和spring data都只是空壳子,代码没有可执行性。Hibernate通过JDBC实现与数据库的交互,但JDBC也是空壳子,必须依赖具体的数据库驱动才能真正执行sql,如果DB是mysql,则需要mysql jdbc driver才能与mysql server交互。Spring Data JPA 是在JPA规范的基础下提供了Repository层的实现,但是使用那一款ORM需要你自己去决定。在spring boot中基于spring data JPA提供了以极少编码实现完整的CRUD的方案。
目前互联网微服务架构主流选型是spring data JPA(Hibernate实现),实现日趋复杂的业务逻辑与持久层的解耦。如果是报表查询密集型的系统则考虑使用MyBatis。

深入理解spring data JPA概念

Java Persistence API (JPA)提供一种标准O-R映射机制、一个执行CRUD操作的EntityManager API以及一种扩展EJB-QL以检索实体的方式,从而标准化了面向Java平台的持久性的使用。spring data JPA直接使用了JPA的O-R映射机制;屏蔽了执行CRUD操作的EntityManager API;基本废弃了Java Persistence query language (JPQL) ,推荐使用Querydsl扩展来实现查询功能。
所以我们需要了解的主要概念变成了如下内容:

  • 实体Entity:
    实体是一个轻量级持久域对象。通常,实体表示关系数据库中的表,并且每个实体实例对应于该表中的一行。实体的主要编程构件是实体类,尽管实体可以使用助手类。实体的持久状态通过持久字段或持久属性表示。这些字段或属性使用对象/关系映射注释将实体和实体关系映射到基础数据存储中的关系数据。实体和实体映射主键都在javax.persistence包下面。
  • 仓库Repository:
    Repository是spring data对java持久层的抽象,它提供了一种可以使用POJO领域对象持久化和CRUD的机制。spring data的Repository接口主要充当标记接口,用于捕获要处理的实体类型,并帮助我们发现扩展这个接口的接口。

参考文档
mybatis与springdata的一些简单比较与思考
https://www.cnblogs.com/abcwt112/p/6945181.html
JPA官方文档
https://docs.oracle.com/javaee/7/tutorial/persistence-intro.htm#BNBPZ
Spring Data JPA 与 MyBatis对比
https://www.jianshu.com/p/3927c2b6acc0
如何对 JPA 或者 MyBatis 进行技术选型
https://blog.csdn.net/yangsnow_rain_wind/article/details/79650616
深入了解 JPA - 1
http://www.cnblogs.com/crawl/p/7703679.html

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值