JPA入门到精通 - JPA入门

本文介绍Java持久层API(JPA)的概念及其与JDBC的区别,探讨JPA的优缺点,适用于中小型项目的理由,并对比JPA、Hibernate及MyBatis的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

自己用JPA很长时间了,但没有系统学习,通过课程自学下平时比较少碰到的内容,并笔记。

JPA概述

什么是JPA

JPA是Java Persistence API的简称,Java持久层API。
Sun公司提取了之前EJB规范惨痛失败的经历。充分吸收了Hibernate基础上。

为什么需要JPA

JDBC作者开发了Hibernate。目标是Java程序员不懂SQL语句,可以来操作数据库。

Hibernate和JPA的关系

对JDBC进行了轻量级封装。将POJO与数据库表建立映射关系,是全自动的ORM框架。
JPA是Java持久化规范。切换到其他ORM是可行的。例如从Hibernate切换到EclipseLink。
JPA是持久化规范,而Hibernate是实现。

JPA的优缺点

JDBC的优缺点

本质:Java对象和关系数据库的转换
有点:直接操作数据库的最底层,性能是最高的(前提有相应的经验)
缺点:

  • 使用复杂(重复代码太多)
  • 移植数据库代价大,改动多
    • 逐渐的生成方式不同(MySQL使用自增,Oracle使用序列)
    • 分页的SQL语句也不同(MySQL使用limit,Oracle使用ROWNUM)
  • 性能优化需要自己处理,没有提供数据缓存,需要自己实现
  • 面向SQL语句操作,不是面向对象

JPA的优缺点

本质:处理Java对象和关系型数据库表之前的转换,只是针对JDBC做了一次封装
优点:

  • 操作简单,代码简单entityManager.persist(ENTITY);
  • 直接面向持久对象操作
  • 提供世界级数据缓存 - 一级缓存、二级缓存、查询缓存
  • 数据库一致性很强,很少的修改
    • 把各个数据库抽取了一个方言接口
    • 不同数据库实现一个方言接口,如果切换数据库,必须修改方言实现和数据库驱动,链接数据库 缺点:
  • 不能干预SQL语句的生成
  • 项目中,对SQL语句的优化要求比较高,不适合使用JPA(可以使用JPA对原生SQL支持解决)
  • 如果一张表中有上亿级别的数据量,也不适合使用JPA,也不适合使用JPDBC(数据库读写分离、分库分表方案解决)
    • 分库分表 - 时间曲度切分

JPA适用项目规模

JPA一般用于中小型项目,如果是超大型项目,不建议使用JPA(性能影响)-> 需要自己去完成性能上的优化,有的优化,JPA做不到,一般会使用MyBatis
PS:JDBC和MyBatis比较容易,JPA或者Hibernate比较困难,因为JPA完全使用面向对象方式开发。

ORM框架

持久 - persistence
就是把数据保存到可掉电存储设备中
持久层就是DAO层,也称作数据访问层

ORM是对象关系映射框架

Object Relational Mapping对象关系映射
ORM就是通过将Java对象映射到数据库表,通过操作Java对象,就可以完成对数据库表的操作

面向对象概念面向关系概念
对象实体表的行(记录)
对象属性表的列(字段)

JPA的历史

JDBC高手

自己实现缓存,可以使用Map的key-value,设置数据内容超过多少,抛弃之前;其次,使用

Hibernte高手

Hibernate用的好的话效率很高

JPA2.1

JPA2.1对应的是Hibernate 4的版本

持久层框架全球占有率

视频的图没有税负率,中国是Hibernate和MyBatis最高

转载于:https://my.oschina.net/hava/blog/1525445

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值