JPA与ORM以及Hibernate
有没有办法让程序员彻底抛弃书写SQL思想,完全的使用面向对象思想开发软件呢?
需要一种可行的ORM框架。
什么是ORM?
不同的数据库使用的SQL语法不同,比如PL/SQL(Oracle)和T/SQL(SQL SERVER);
同样的功能不同的数据库有不同的实现方式;
程序过分依赖SQL对程序的移植性及扩展维护等带来很大的麻烦。
ORM框架包括Entity EJB、Hibernate、iBATIS、TopLink等,很多公司还开发了自己的ORM框架来解决项目的持久化。然而每种ORM框架都有自己的语法,他们之间不能直接通用。
对开发者而言,很多数据库持久化的的操作都是类似的,项目中采取的框架不同会造成代码的重复性。那么有没有办法来改善这种情况呢?
回想JDBC可以作为为多种关系数据库提供相同的访问方式,使开发人员方便于编写数据库应用程序。那么是不是可以有一种规范可以像JDBC一样提供不同ORM框架的统一规范。
Sun公司为了简化现有Java EE和Java SE应用的对象持久化的开发工作,整合ORM技术,结束现在Hibernate、iBATIS、TopLink等ORM框架各自为营的局面,提出了新的JPA ORM规范。
1) JPA为POJO提供持久化标准规范。
2) JPA的使用:
Hibernate与TopLink以及OpenJpa都提供了JPA的实现。
3) JPA主要技术:
JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下三方面的技术:
A. ORM映射元数据:JPA通过注解或XML描述映射关系,并将运行中的实体对象持久化到数据库中。
B. JPA持久化API:使用面向对象的思想,操作实体对象,进行增删改查的操作。至于怎么操作,由框架思考这件事。这必将大大的节省了开发时间,提 高了开发效率。
C. 查询语言:使用面向对象的思想避免了同程序的SQL语句产生交集。
4) JPA与Hibernate
注意,前面说过了,JPA是统一了各种ORM框架的接口,所以说,可以把JPA理解为它并不是新的ORM框架,是接口,是规范,是工具。就像JDBC不是数据库一样,也没有办法代替数据库。同理,JPA也不是ORM框架,我们可以透过JPA使用各种ORM,实现各项目之间的移植性,这是做到低耦合、可扩展的程序设计。
Hibernate是ORM框架,它实现了JPA的规范。
实现JPA接口也并不意味着可以替代Hibernate,Hibernate的索引功能,缓存功能并没有相应的接口,所以有些时候还是需要Hibernate的。但是!凡是JPA能实现的功能都用JPA来实现,以此来减少框架之间的耦合性。
PS:本人也在不断的学习中,这是在翻看了各种Hibernate,ORM,JPA资料后做出的总结,如果有不恰当的地方欢迎指出,大家互相交流,共同进步!
JPA与ORM以及Hibernate的更多相关文章
- 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化
准备工作 在上篇博客中学习ORM框架—hibernate(一):初识hibernate,通过简单的实例说明O和R的映射过程.本篇博客将要介绍hibernate中持久化对象的状态,并使用hibernat ...
- Spring Data JPA、MyBatis还有Hibernate有什么区别
原文:https://www.imooc.com/article/19754?block_id=tuijian_wz Spring Data JPA.MyBatis还有Hibernate有什么区别 2 ...
- jpa遇到的 org.hibernate.PersistentObjectException: detached entity passed to persist异常
jpa遇到的 org.hibernate.PersistentObjectException: detached entity passed to persist异常 发生这个原因是因为我们已经在实体 ...
- JPA、ORM
JPA:全称:Java Persistence API 解释:Java持久层API (接口规范) ORM映射元数据 JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系 ...
- jpa是什么,和hibernate 有什么关系
JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.JPA 的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码来实现该API,而不 ...
- 12 Spring Data JPA:orm思想和hibernate以及jpa的概述和jpa的基本操作
spring data jpa day1:orm思想和hibernate以及jpa的概述和jpa的基本操作 day2:springdatajpa的运行原理以及基本操作 day3:多表操作,复杂查询 d ...
- Hibernate之ORM与Hibernate
ORM: ORM是 Object /Relation Mapping,对象/关系数据库映射. 目前比较流行的编程语言,如java ,c#等,它们都是面向对象的编程语言,而目前比较主流的数据库产品,如O ...
- springboot~JPA把ORM统一起来
JPA介绍 JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.他的出现主要是为了简 ...
- ORM和Hibernate的配置方式
分层体系结构: 逻辑上一般分为三层:表述层(提供与用户交互的界面).业务逻辑层(实现各种业务的逻辑).数据库层(负责存放和管理应用的持久性业务数据). 物理上一般分为两层:物理层(每一层都运行在网络上 ...
随机推荐
- Codevs No.1052 地鼠游戏
2016-05-31 18:22:32 题目链接: 地鼠游戏 Codevs No.1245 题目大意: 打地鼠,一开始所有地鼠都出现,但是维持的时间(s)和击中所得的积分各不同,求出采用最优策略(1s ...
- homework-02 "最大子数组之和"的问题进阶
代码编写 这次的作业瞬间难了好多,无论是问题本身的难度或者是单元测试这一原来没接触过的概念或者是命令行参数的处理这些琐碎的问题,都使得这次作业的完成说不上轻松. 最大子数组之和垂直水平相连的拓展问题解 ...
- 扩展KMP--求字符串S的所有后缀和字符串T的最长公共前缀
在解上面这个问题前我们要先解决一个类似的问题:求字符串s的所有后缀和s本身的最长公共前缀: 我们用next[]数组保存这些值: 现在我们假设要求next[ x ],并且next[ i ] 0<i ...
- C++获取系统的Mac地址
C++获取系统的Mac地址,加上libnetapi32.a #include <windows.h> #include <stdlib.h> #include <stdi ...
- Android系统中Parcelable和Serializable的区别
转载:https://greenrobot.me/devpost/android-parcelable-serializable/ 进行Android开发的时候,我们都知道不能将对象的引用传给Acti ...
- type=INNODB和engine=INNODB的区别
我在网站下载了一份源码,学习中, 发现type=INNODB,这个数据库引擎老实出错,,后来才一查资料才是: 在MYSQL5.5及以后版本中type=InnoDB 由ENGINE=InnoDB 代替. ...
- 命令行刷机教程( 以Linux系统为例 )
//第一步adb device // 如果不能cd AndroidSDK/platform-toolsadb kill-server adb start-server //第二步adb reboot ...
- time_t转换为DateTime
最近解析文华财经的日线数据. 取得的第一个字段是日期,为time_t格式(long)的. 因为是用C#来写解析程序,所以要转换为DateTime的. time_t是世界时间,要转换为本地时间,所以要加 ...
- ecshop收货人信息中修改手机号为必填
Ecshop 修改收货人信息 把电话改成选择填写 手机改为必填 (加强版) 1. 编辑根目录/js/utils.js 增加手机号码的正则表达式 参照Utils.isTel = function ( ...
- 数据库MySQL常用命令复习
-- 查看数据库 show databases; -- 创建数据库 create database '数据库名'; -- 删除数据库 drop database '数据库名'; -- 选库 use ' ...