(1)、JPA介绍:

JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口。JPA吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。使用JPA持久化对象,并不是依赖于某一个ORM框架。

为什么要使用JAP?
      在说为什么要使用JPA之前,我们有必要了解为什么要使用ORM技术。

ORM 是Object-Relation-Mapping,即对象关系影射技术,是对象持久化的核心。ORM是对JDBC的封装,从而解决了JDBC的各种存在问题:

a) 繁琐的代码问题

用JDBC的API编程访问数据库,代码量较大,特别是访问字段较多的表的时候,代码显得繁琐、累赘,容易出错。例如:PreparedStatement pstmt=con.prepareStatment("insert into account value(?,?,?,?,?,?,?,?,?)");

ORM则建立了Java对象与数据库对象之间的影射关系,程序员不需要编写复杂的SQL语句,直接操作Java对象即可,从而大大降低了代码量,也使程序员更加专注于业务逻辑的实现。

b) 数据库对象连接问题

关系数据对象之间,存在各种关系,包括1对1、1对多、多对1、多对多、级联等。在数据库对象更新的时候,采用JDBC编程,必须十分小心处理这些关系,以保证维持这些关系不会出现错误,而这个过程是一个很费时费力的过程。

ORM建立Java对象与数据库对象关系影射的同时,也自动根据数据库对象之间的关系创建Java对象的关系,并且提供了维持这些关系完整、有效的机制。

c) 系统架构问题

JDBC属于数据访问层,但是使用JDBC编程时,必须知道后台是用什么数据库、有哪些表、各个表有有哪些字段、各个字段的类型是什么、表与表之间什么关系、创建了什么索引等等与后台数据库相关的详细信息。

使用ORM技术,可以将数据库层完全隐蔽,呈献给程序员的只有Java的对象,程序员只需要根据业务逻辑的需要调用Java对象的Getter和 Setter方法,即可实现对后台数据库的操作,程序员不必知道后台采用什么数据库、有哪些表、有什么字段、表与表之间有什么关系。

d) 性能问题

采用JDBC编程,在很多时候存在效率低下的问题。

pstmt =conn.prepareStatement("insert into user_info values(?,?)");
       for (int i=0; i<1000; i++) {
          pstmt.setInt(1,i);
          pstmt.setString(2,"User"+i.toString());
          pstmt.executeUpdate();
       }

以上程序将向后台数据库发送1000次SQL语句执行请求,运行效率较低。

采用ORM技术,ORM框架将根据具体数据库操作需要,会自动延迟向后台数据库发送SQL请求,ORM也可以根据实际情况,将数据库访问操作合成,尽量减少不必要的数据库操作请求

知道Jpa是一种规范,而Hibernate是它的一种实现。除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实现而不必改动太多代码。

在play中定义Model时,使用的是jpa的annotations,比如javax.persistence.Entity, Table, Column, OneToMany等等。但它们提供的功能基础,有时候想定义的更细一些,难免会用到Hibernate本身的annotation。我当时想,jpa这 么弱还要用它干什么,为什么不直接使用hibernate的?反正我又不会换成别的实现。

因为我很快决定不再使用hibernate,这个问题就一直放下了。直到我现在在新公司,做项目要用到Hibernate。

我想抛开jpa,直接使用hibernate的注解来定义Model,很快发现了几个问题:

  1. jpa中有Entity, Table,hibernate中也有,但是内容不同
  2. jpa中有Column,OneToMany等,Hibernate中没有,也没有替代品

我原以为hibernate对jpa的支持,是另提供了一套专用于jpa的注解,但现在看起来似乎不是。一些重要的注解如Column, OneToMany等,hibernate没有提供,这说明jpa的注解已经是hibernate的核心,hibernate只提供了一些补充,而不是两 套注解。要是这样,hibernate对jpa的支持还真够足量,我们要使用hibernate注解就必定要使用jpa。

第一个是问如果想用hibernate注解,是不是一定会用到jpa的。网友的回答:“是。如果hibernate认为jpa的注解够用,就直接用。否则会弄一个自己的出来作为补充”

第二个是问,jpa和hibernate都提供了Entity,我们应该用哪个,还是说可以两个一起用?网友回答说“Hibernate的Entity是继承了jpa的,所以如果觉得jpa的不够用,直接使用hibernate的即可”

转载于:https://www.cnblogs.com/jie-jie123/p/8551105.html

什么是JAP,什么是ORM,与hibernate的关系相关推荐

  1. Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联...

    2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...

  2. Hibernate映射关系

    为什么80%的码农都做不了架构师?>>>    前言 Hibernate Annotation关系映射有下面几种类型: 一对一外键关联映射(单向) @OneToOne(cascade ...

  3. Hibernate对象关系映射详解之一对多关系映射

    Hibernate对象关系映射详解之"一对多"关系映射 之前学习Hibernate框架的时候,对这七大关系映射一直是云里雾里的,虽然可以仿照写出代码,但是不能独立编写出来.鉴于工作 ...

  4. ORM进阶之Hibernate中关系映射

    ORM进阶之 ORM简介 ORM进阶之Hibernate简介及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 ORM进阶之Hibernate中一对 ...

  5. jap sql 保存_【hibernate spring data jpa】执行了save()方法 sql语句也执行了,但是数据并未插入数据库中...

    [转]用CSS代码写出的各种形状图形的方法 一共收集整理了图形20个,比较实用,同时也为了熟悉CSS的代码.整合了一下,有错误欢迎指出. 1.正方形 #square {width: 100px;hei ...

  6. JPA和Hibernate的关系

    转载自:https://www.cnblogs.com/amoyzhu/p/5937717.html JPA Java Persistence API,是Java EE 5的标准ORM接口,也是ejb ...

  7. JPA和Hibernate的关系(转)

    JPA Java Persistence API,是Java EE 5的标准ORM接口,也是ejb3规范的一部分. Hibernate,当今很流行的ORM框架,是JPA的一个实现,但是其功能是JPA的 ...

  8. 【Java数据库】ORM思想:对象关系映射 使用Java容器存储多条记录

    数据库结构 database名:sorm emp表: 与dept表表通过deptid,达到逻辑关联的效果(加一个真正的外键也不是不可以) dept表: 1.使用List嵌套Object存储返回的多条记 ...

  9. JPA与Hibernate的关系

    1.JPA JPA全称: Java Persistence API   JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.   JPA的出现?    ...

最新文章

  1. ASCII码转换成特殊字符
  2. 十一在家都逛哪些技术网站?(程序员必备58个网站汇总)
  3. android url回调json,【求助】本地页面如何取某个URL返回的json
  4. c语言链表有没有哨兵的区别,链表中的哨兵(sentinel)
  5. (最短路)Shopping
  6. Linux块层技术全面剖析-v0.1
  7. frm ibd文件导入mysql_Mariadb,Mysql如何根据.frm和.ibd文件来恢复数据和表结构
  8. MJRefresh的使用
  9. MySQL的InnoDB表如何设计主键索引-转自淘宝MySQL经典案例
  10. tftp拷贝linux文件夹,CentOS下使用TFTP向目标板传送文件
  11. 2022年认证杯SPSSPRO杯数学建模A题(第一阶段)人员的紧急疏散求解全过程文档及程序
  12. 用Multisim对高频丙类谐振功率放大器进行仿真
  13. 华中科技大学伍冬睿教授团队关于生理计算中的对抗攻击与防御综述
  14. 基于Qt秒表设计(Qt绘图秒表示例)
  15. xposed模块编写教程_最新的Xposed模块编写教程
  16. 为什么不是每个人都过着他梦想中的生活呢?
  17. 3D MAX 安装中的一些问题 一直初始化、闪退
  18. vant-Weapp实现省市区三级联动顶部弹出列表
  19. 爆肝1个多月,严选10大热门静态博客框架,官方文档、教学视频、经典案例、热门插件一应俱全,强烈建议收藏
  20. 基于浏览器的交互式Go学习平台 | Gopher Daily (2020.11.14) ʕ◔ϖ◔ʔ

热门文章

  1. Flex DataGrid的labelFunction用法例子
  2. 更改管理员密码以后网站不能启动
  3. 问题 J: 输出是m的倍数或n的倍数、但不是m和n的公倍数的数
  4. java判断对象已经被回收_Java中JVM判断对象已死的基本算法分析
  5. 森林图怎么分析_新疆森林消防总队特勤大队:“火焰蓝”备战春防,我们时刻准备着!...
  6. qlineedit 设置界面不能输入_一个类似QQ的登陆界面为什么两个输入QLineEdit的上下距离太远...
  7. python程序30行_Python30行代码实现对pdf文字内容的提取
  8. Neural Motifs: Scene Graph Parsing with Global Contex
  9. 去中心化NFT交易生态系统Mochi.Market将在DAO Pad进行SHO
  10. 万向区块链与生态圈合作伙伴形成RISC-V国际区块链SIG