当前位置: 首页 > news >正文

JPA详解

文章目录

    • JPA概述
    • JPA的优势
    • JPA注解

JPA概述

Java Persistence API(JPA)是 Java EE 平台的一部分,它为开发者提供了一种用于对象关系映射(ORM)的标准化方法。JPA 提供了一组 API 和规范,用于在 Java 应用程序和关系型数据库之间进行交互。
JPA 的主要特性和优点包括:

  1. 对象关系映射:JPA 允许开发者通过注解或 XML 配置将 Java 对象与数据库表之间进行映射,实现对象与关系数据库之间的转换。这样,开发者可以使用面向对象的方式处理数据,而不需要编写原始的 SQL 语句。
  2. 数据持久化:JPA 提供了一组 API,用于管理对象的生命周期和持久化操作。通过 JPA,开发者可以将对象存储到数据库中、从数据库中检索对象、更新对象以及删除对象。
  3. 查询语言:JPA 引入了一种与关系数据库无关的查询语言,称为 JPQL(Java Persistence Query Language)。JPQL 允许开发者以面向对象的方式编写查询,而不需要关心底层的数据库结构。
  4. 事务支持:JPA 支持事务管理,开发者可以使用 JPA 的事务机制来处理并发访问和数据一致性的问题。
  5. 延迟加载:JPA 支持延迟加载,可以根据需要在运行时动态加载与对象关联的数据,提高应用程序的性能。
    JPA 是一个规范,并不是具体的实现。在实际开发中,可以选择不同的 JPA 提供商,如 Hibernate、EclipseLink 等,它们都是根据 JPA 规范来实现的。
    通过使用 JPA,开发者可以更方便地进行对象持久化和数据库操作,减少了编写大量的 SQL 语句的工作,提高了开发效率。同时,由于 JPA 是 Java EE 标准的一部分,因此可以方便地与其他 Java EE 技术(如 Servlet、EJB 等)进行集成。
    JPA, 全称Java Persistence API,翻译为JAVA持久层应用接口,JPA本身并不是一个框架,它本质上是一种ORM规范,Hibernate是一个框架,也是JPA的一种实现。
    在这里插入图片描述

JPA的优势

  1. 标准化: 提供相同的 API,这保证了基于 JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。
  2. 简单易用,集成方便: JPA 的主要目标之一就是提供更加简单的编程模型,在 JPA 框架下创建实体和创建 Java 类一样简单,只需要使用 javax.persistence.Entity 进行注解;JPA 的框架和接口也都非常简单。
  3. 可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA 定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
  4. 支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型。

JPA注解

@Entity:@Table(name=”“):表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略
@MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。
@NoRepositoryBean:一般用作父类的repository,有这个注解,spring不会去实例化该repository。
@Column:如果字段名与列名相同,则可以省略。
@Id:表示该属性为主键。
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”):表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。
@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1):name为sequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。
@Transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式
@JsonIgnore:作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。
@JoinColumn(name=”loginId”):一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。
@OneToOne、@OneToMany、@ManyToOne:对应hibernate配置文件中的一对一,一对多,多对一。
@Entity @Table(name=”“)
表明这是一个实体类。一般用于jpa ,这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略;
@MappedSuperClass
用在确定是父类的entity上。父类的属性子类可以继承;
@NoRepositoryBean
一般用作父类的repository,有这个注解,spring不会去实例化该repository;
@Column
如果字段名与列名相同,则可以省略;
@Id
表示该属性为主键;
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator = “repair_seq”)
表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq;
@SequenceGenerator(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1)
name为sequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致;
@Transient
表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.
如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic;
@Basic(fetch=FetchType.LAZY)
标记可以指定实体属性的加载方式;
@JsonIgnore
作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响;
@JoinColumn(name=”loginId”)
一对一:本表中指向另一个表的外键。
一对多:另一个表指向本表的外键。
@OneToOne
@OneToMany
@ManyToOne
对应Hibernate配置文件中的一对一,一对多,多对一。

http://www.lryc.cn/news/361458.html

相关文章:

  • Linux线程:线程分离
  • chatgpt之api的调用问题
  • Java中lambda表达式是啥怎么使用
  • selenium中, quit 和close的区别
  • 管易云和金蝶云星空接口打通对接实战
  • DP-Kmaens密度峰值聚类算法
  • STM32-14-FSMC_LCD
  • linux nohup命令详解:持久运行命令,无视终端退出
  • PS系统教程09
  • 2024089期传足14场胜负前瞻
  • 备战十一届大唐杯国赛预选赛
  • 安装 Android Studio 2024.1.1.6(Koala SDK35)和过程问题解决
  • 美团一面:什么是CAS?有什么优缺点?我说你说的是AtomicInteger吗?
  • 【linux】(2)文件内容排序sort
  • css 图片上添加模糊背景的文字内容
  • Python3 函数参数
  • 精准检测,可燃气体报警系统的技术原理与特点
  • 6月2(信息差)
  • 先锋文汇发稿技巧方法
  • 无人机推流/RTMP视频推拉流EasyDSS无法卸载软件是什么原因?
  • QML信号连接到c++的槽函数(五)
  • [Windows] 植物大战僵尸杂交版
  • JVM之【GC-可达性分析算法】
  • 【机器学习】——驱动智能制造的青春力量,优化生产、预见故障、提升质量
  • Python实用代码片段分享(三)
  • 树形结构-CRUD接口
  • 【Qt知识】Qt窗口坐标系
  • SAP Build引言
  • 2024上海国际钢丝绳及吊索具展览会
  • 记一次mysql索引优化