JPA入门

文章目录

  • JPA概述
    • JPA
    • Spring Data JPA
  • JPA注解
    • 基础注解
      • Entity
      • Table
      • Id
      • Enumerated
      • Transient
      • Column
      • Temporal
    • 联合主键注解
      • IdClass
      • Embeddable和EmbeddedId注解
    • 实体之间关联关系注解
      • OneToOne
      • ManyToOne和OneToMany
  • Repository
  • JPA查询方式
    • DQM(定义查询方法)
      • 使用实例
    • DMQ方法名中支持的关键字
      • 支持分页和排序
      • 限制查询结果
    • @Query方式查询
      • like
      • 原生SQL
      • 参数
    • QueryByExampleExecutor
      • 示例
    • JpaSpecificationExecutor
      • 接口
      • Specification接口
      • 示例
      • img
  • open-in-view

JPA概述

在这里插入图片描述
1、简介:
Java Persistence API:用于对象持久化的 API。
Java EE 5.0 平台标准的 ORM规范,使得应用程序以统一的方式访问持久层。
在这里插入图片描述
2、JPA 是 hibernate 的一个抽象(就像JDBC和JDBC驱动的关系):
JPA 是规范:JPA 本质上就是一种 ORM 规范,不是ORM 框架—— 因为 JPA 并未提供 ORM 实现,它只是制订了一些规范,提供了一些编程的 API 接口,但具体实现则由 ORM 厂商提供实现。
Hibernate是实现:Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现
从功能上来说, JPA 是 Hibernate 功能的一个子集。

3、JPA 的特点:
标准化: 提供相同的 API,这保证了基于JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。

简单易用,集成方便: JPA 的主要目标之一就是提供更加简单的编程模型,在 JPA 框架下创建实体和创建 Java 类一样简单,只需要使用 javax.persistence.Entity 进行注释;JPA 的框架和接口也都非常简单。

可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型。

4、JPA 技术:
ORM 映射元数据:JPA 支持 XML 和 JDK 5.0 注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。

JPA 的 API:用来操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐的 JDBC和 SQL代码中解脱出来。

查询语言(JPQL):这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序和具体的 SQL 紧密耦合。

JPA

  • 基于ORM思想实现的框架都称为JPA框架
  • JPA 是一个基于O/R映射的标准规范,只定义标准规则(如注解、接口),不提供实现。
  • JPA 的主要实现有Hibernate、EclipseLink 和OpenJPA 等

Spring Data JPA

对于JPA规范的再次封装,底层实现使用了Hibernate的技术,属于Spring生态的一部分。

img

JPA注解

基础注解

Entity

  • 用于定义这个对象是实体类,将成为JPA的管理对象,必用!
  • 只能用在class上,默认值是类名

Table

  • 指定数据库的表名,表示此实体对应哪张数据表
  • 可以不填,默认表名就是实体名

Id

  • 数据库主键,必须有主键
  • 可以配合@GeneratedValue定义主键生成策略

Enumerated

  • 为实体中的字段提供枚举值
  • @Enumerated默认是枚举值所在的下标(不建议用
  • @Enumerated(*.class)表示枚举本身的名称

img

  • @Enumerated(EnumType.ORDINAL)在数据库中存的是0,1
  • @Enumerated(EnumType.STRING)在数据库中存的是MIAL/FEMAIL

Transient

  • 表示该属性不是一个持久化的属性,不需要映射到数据库中
  • 有此注解,JPA持久化的时候会忽略

Column

  • 表示该属性对应到数据库中的列名
  • 不写的时候直接就是默认字段名
  • 默认允许为空
  • insertable和updatable可以选择是否在insert或者update是包含此字段
    -insertable和updatable一般多用于只读的属性,例如主键和外键等,这些字段的值通常是自动生成的

Temporal

  • 表示Date类型的属性映射到对应精度的字段
  • @Temporal(TemporalType.Date):只有日期
  • @Temporal(TemporalType.Time):只有时间
  • @Temporal(TemporalType.TimeStamp):日期+时间

联合主键注解

IdClass

  • 新建一个主键类,类中包含主键字段,此类必须实现Serializable接口,无参构造函数必须是默认的,且必须覆盖equals和hashCode方法。equals方法用于判断两个对象是否相同, EntityManger通过find方法来查找Entity时是根据equals的返回值来判断的。 在本例中, 只有对象的值完全相同或同一个对象时才返回true, 否则返回false。 hashCode方法返回当前对象的哈希码, 生成的hashCode相同的概率越小越好, 算法可以进行优化。
  • 实体中使用@IdClass(*.class)表示使用此主键类
  • 实体中对应的主键字段加上@Id

主键类:主键字段为:title和createUserId联合主键

img

实体类:

img

Embeddable和EmbeddedId注解

img

实体之间关联关系注解

OneToOne

  • 表示对象直接一对一的关系,比如一个客户记录表对应一个客户资金表
  • 注解放在字段属性上或者放在getter/setter方法上
  • 可以配置单向关联和双向关联
  • 如果是配置单向关联,则此注解只用在拥有外键的一方

img

  • OrphanRemoval:表示是否删除孤立元素,例如映射关系是一对一,或一对多。加上这个注解,即使不设置级联关系,删除一的时候,多的一方肯定是孤立元素了。
  • 尽量不适用一对一中的双向关联
  • 级联操作应该保持默认
  • 关联的地方尽量使用LAZY

ManyToOne和OneToMany

  • ManyToOne表示多对一,用在维护外键关系的一方,我们理解的多的一方
  • OneToMoney表示一对多,
  • 两个成对使用且维护关系的一方是拥有外键的一方,另一方必须配置apperBy

img

img

Repository

Spring Data里面做数据库操作的最底层的抽象接口、 最顶级的父类。

JPA查询方式

DQM(定义查询方法)

  • 一种是直接通过方法名实现
  • 另一种通过@Query手动在方法上定义

使用实例

img

DMQ方法名中支持的关键字

在这里插入图片描述
在这里插入图片描述

支持分页和排序

img

限制查询结果

img

@Query方式查询

img

like

img

原生SQL

img

参数

img

QueryByExampleExecutor

示例

img

  • 查询所有名称是“linan”结尾且公司名称是“海”开始的记录
  • 实体对象:在持久化框架中与Table对应的域对象,一个对象代表数据库表中的一条记录,如上例中person对象。在构建查询条件时,一个实体对象代表的是查询条件中的“数值”部分。如:要查询姓“linan”的客户,实体对象只能存储条件值“linan”。
  • 匹配器:ExampleMatcher对象,它是匹配“实体对象”的,表示了如何使用“实体对象”中的“值”进行查询,它代表的是“查询方式”,解释了如何去查的问题。
  • 实例:即Example对象,代表的是完整的查询条件。由实体对象(查询条件值)和匹配器(查询方式)共同创建。

就是通过一个例子来查询。要查询的是Person对象,查询条件也是一个Person对象,通过一个现有的对象作为例子,查询和这个例子相匹配的对象。

JpaSpecificationExecutor

接口

img

Specification接口

img

  1. Root: 代表了可以查询和操作的实体对象,如果将实体对象比喻成表名,那root里面就是这张表里面的字段,是JPQL的实体字段,通过.get(String var0)来获得操作的字段
  2. CriteriaQuery<?>: 代表一个specific的顶层查询对象,它包含着查询的各个部分,如: select、form、where、group by、order by 等,它提供了查询var1的的方法,常用的有 where、select、having
  3. CriteriaBuilder: 用来构建CriteriaQuery的构建器对象,其实就相当于条件或条件组合

使用Specification的要点就是CriteriaBuilder,通过这个对象来创建条件,之后返回一个Predicate对象。这个对象中就有了相应的查询需求,我们同样可以定义多个Specification,之后通过Specifications对象将其连接起来

示例

img

open-in-view

  1. 两个属性值:true或者false
  2. True: 假如我们在Controller调用了两个Service层的事务方法,那么在Controller开始执行的时候创建session,直到两个事务都结束且Controller方法执行完毕才关闭Session。
  3. False:假如我们在Controller调用了两个Service层的事务方法, 每个事务开始的时候都会创建Session,在每个事务结束之后关闭Session。。可能会引起Lazy异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java8——Stream流操作List排序_List集合中每个对象元素按时间顺序排序

一个学生类的实体类 Data public class Student {private Long id;private String name;private int age;private Double height;public Student(Long id, String name, int age, Double height) {this.id id;this.name name;this.age age;this.height height;}然后我们测…

java线程初始方法三种_Java 多线程 三种实现方式

Java多线程实现方式主要有三种&#xff1a;继承Thread类、实现Runnable接 口、使用ExecutorService、Callable 实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值&#xff0c;只有最后一种Callable是带返回值的&#xff0c;返回结果可以从Future中取出来关于Exe…

java控制层创建websocket_用Java构建一个简单的WebSocket聊天室

前言首先对于一个简单的聊天室&#xff0c;大家应该都有一定的概念了&#xff0c;这里我们省略用户模块的讲解&#xff0c;而是单纯的先说说聊天室的几个功能&#xff1a;自我对话、好友交流、群聊、离线消息等。今天我们要做的demo就能帮我们做到这一点啦&#xff01;&#xf…

Java中Date与 LocalDateTime ,LocalDate之间的转换

Date与LocalDateTime和LocalDate互相转换思路 Date转LocalDateTime和LocalDate都可以通过Date先转换成Instant然后再转换成LocalDateTime和LocalDate&#xff0c;可以按照下图的方式进行转换。LocalDateTime和LocalDate转换成Date也是以Instant为中介来进行转换的。 1&#xff…

Spring-data-jpa入门(一)

啥是JPA 我这个小白没有听说过&#xff0c;全英文名叫Java Persistence API&#xff0c;就是java持久化api&#xff0c;是SUN公司推出的一套基于ORM的规范。 持久化想必如雷贯耳&#xff0c;都2022年了&#xff0c;谁还不用个持久化框架啊&#xff0c;举起mybatis。 ORM呢&a…

struts单例模式 java_Java单例设计模式详细介绍

Java单例设计模式教程中包含了单例模式的定义、特点以及线路安全等问题。单例模式定义&#xff1a;单例模式确保某个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例。在计算机系统中&#xff0c;线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对…

NetBeans、Eclipse 和 IDEA,哪个才是最优秀的Java IDE?

NetBeans、Eclipse 和 IDEA&#xff0c;哪个才是最优秀的Java IDE? 本文将向您介绍三种流行的Java IDE的基本特点&#xff0c;并比较它们的优缺点。 众所周知&#xff0c;集成开发环境(IDE)能够让程序员的日常编程过程&#xff0c;比起直接在文本编辑器上编写代码要容易得多。…

Spring-data-jpa入门(二)

前言 上一节我们讲解了spring-data-jpa最基础的架构和最简单的增删查改的实现&#xff0c;可以发现spring-data-jpa在简单增删查改的实现是非常友好的&#xff0c;甚至根本见不着sql语句的存在&#xff0c;让人直呼NB。 还记得上一节埋的几个坑吗&#xff0c;这一节就先把坑填…

JavaWeb学习笔记——详细

一、HTTP协议简介 1、什么是http协议 概述&#xff1a; HTTP是Hyper Text Transfer Protocol的缩写&#xff0c;即超文本传输协议。它是一种请求/响应式的协议&#xff0c;客户端在与服务器端建立连接后就可以向服务器端发送请求&#xff0c;这种请求被称作HTTP请求&#xf…

基本数据类型和包装类的区别,编程中如何选择?

问题&#xff1a;基本数据类型和包装类有什么区别吧&#xff0c;什么时候用包装类什么时候用基本数据类型&#xff1f; 最本质的区别&#xff1a;基本数据类型不是对象&#xff0c;包装类型是对象存储位置不同&#xff1a;基本类型是直接将变量值存储在栈中&#xff0c;而包装…

java怎么获取控制台内容的类型_java 怎么获取控制台的数据并且输出到GUI上

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼以前做过&#xff0c;给个参考。为防止格式错乱&#xff0c;以下代码用base64解码一下得到格式良好的代码。aW1wb3J0IG9yZy5qdW5pdC5UZXN0OwoKaW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0a…

描述一下JAVA的加载过程_JVM源码分析之Java类的加载过程

简书 占小狼转载请注明原创出处&#xff0c;谢谢&#xff01;趁着年轻&#xff0c;多学习背景最近对Java细节的底层实现比较感兴趣&#xff0c;比如Java类文件是如何加载到虚拟机的&#xff0c;类对象和方法是以什么数据结构存在于虚拟机中&#xff1f;虚方法、实例方法和静态方…

MongoDB 官方云端使用方法

MongoDB介绍 MongoDB是一种面向文档型的非关系型数据库&#xff08;NoSQL&#xff09;&#xff0c;由C编写。非关系数据库中是以键值对存储&#xff0c;结构不固定&#xff0c;易存储&#xff0c;减少时间和空间的开销。文档型数据库通常是以JSON或XML格式存储数据&#xff0c…

java cpu io高_服务器负载过高问题分析-不是cpu高负载也不是IO负载如何处理(阿里 几乎是必考题)...

关于top命令 经常问load average 参考&#xff1a;load average 定义(网易面试)问题现象&#xff1a;1&#xff0c;top命令查询服务器负载达到2.0-5之间&#xff0c;tomcat的cpu使用率达到104%load average:linux系统中的Load对当前CPU工作量的度量。简单的说是进程队列的长度。…

MaxCompute开发笔记——快速入门

前提条件 请确保以下工作已经完成&#xff1a; 开通阿里云账号。 购买MaxCompute。 创建要使用的项目空间&#xff0c;详情请参见创建空间。如果要使用的项目空间已存在&#xff0c;请确保已被添加至此项目空间并被赋予建表等权限。 完成客户端安装配置。 导入数据 Tunn…

java中android_在Android中用纯Java代码布局

本文的完成了参考了一篇国外的教程,在此表示感谢。Android中的界面布局主要有两种方式&#xff0c;一种是xml文件和Java代码结合的布局方式&#xff0c;一种是完全依靠Java代码布局。两种布局方式的比较对于第一种方式&#xff0c;大多数人都比较熟悉&#xff0c;在这里就不细说…

DataWorks概述

文章目录一、DataWorks概况1.1 定义1.2 功能1.3 与MaxCompute的关系二、基于DataWorks与MaxCompute构建云数仓一站式大数据开发治理DataWorks学习DataWorks 是什么&#xff1f;产品定位产品受众核心能力数据治理的概念、需求层次和目标对于数据治理概念的一些基本理解数据治理的…

Dataworks的使用——详细说明

一、开通Dataworks &#xff08;1&#xff09;百度搜Dataworks&#xff0c;进入如下页面&#xff0c;点击立即开通 &#xff08;2&#xff09; 这里要选好自己想要的配置&#xff0c;这里展示我之前的配置 解决方案&#xff1a;选DataWorksMaxCompute组合产品 DataWorks&…

DataWorks快速入门

快速入门 入门概述 说明 如果您是第一次使用DataWorks&#xff0c;请确认已经根据准备工作模块的操作&#xff0c;准备好账号和工作空间角色等内容后&#xff0c;登录DataWorks控制台&#xff0c;单击相应工作空间后的进入数据开发&#xff0c;即可进行数据开发操作。本模块的…

php.amazeui,AmazeUI 导航条的实现示例

拥有易用的导航条对于任何网站都很重要。本文主要介绍了AmazeUI 导航条的实现示例&#xff0c;分享给大家&#xff0c;具体如下&#xff1a;导航条Amaze UI导航切换 首页项目下拉 标题1. 去月球2. 去火星3. 还是回地球4. 下地狱5. 桥头一回首其他 注册随便看看登录....am-topba…