600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > JPA---Java持久层API

JPA---Java持久层API

时间:2023-03-21 11:36:42

相关推荐

JPA---Java持久层API

JPA讲义

Java持久层API

目 录

1 JPA概述.................................................................................................................. 3

1.1 JPA是什么................................................................................................... 3

1.1.1 ORM是什么...................................................................................... 3

1.1.2 标准是什么....................................................................................... 3

1.2 JPA的实现者............................................................................................... 4

1.3 JPA的作用是什么....................................................................................... 4

2 入门示例................................................................................................................ 4

2.1 配置流程图.................................................................................................. 5

2.2 配置步骤说明.............................................................................................. 5

2.3 配置步骤...................................................................................................... 5

2.3.1 第一步:创建Maven项目.............................................................. 6

2.3.2 第二步:创建一个总配置文件....................................................... 7

2.3.3 第三步:封装JPAUtils工具类......................................................... 8

2.3.4 第四步:创建映射实体类............................................................... 8

2.3.5 第五步:在总配置文件中加载映射实体类................................... 9

2.3.6 第六步:操作实体类保存数据..................................................... 10

3 移植Hibernate JPA代码到OpenJPA(了解)................................................... 11

3.1 说明............................................................................................................ 11

3.2 示例代码.................................................................................................... 12

3.2.1 第一步:导入OpenJPA依赖......................................................... 12

3.2.2 第二步:修改总配置文件............................................................. 12

3.3 使用JPA的好处........................................................................................ 13

4 JPA实现CRUD..................................................................................................... 13

5 JPA常用 API说明............................................................................................... 15

5.1 映射注解说明............................................................................................ 15

5.2 JPA常用API说明...................................................................................... 15

6 JPA多表关联查询................................................................................................ 16

6.1 一对多实现................................................................................................ 16

6.1.1 说明................................................................................................. 16

6.1.2 配置步骤......................................................................................... 17

6.2 多对一实现................................................................................................ 20

6.2.1 说明................................................................................................. 20

6.2.2 配置步骤......................................................................................... 20

6.3 双向一对多|多对一(了解).................................................................. 22

6.3.1 说明................................................................................................. 22

6.3.2 配置步骤......................................................................................... 23

6.4 一对一实现................................................................................................ 24

6.4.1 说明................................................................................................. 24

6.4.2 配置步骤......................................................................................... 24

6.5 配置多对多................................................................................................ 28

6.5.1 说明................................................................................................. 28

6.5.2 配置步骤......................................................................................... 28

7 JPA逆向工程........................................................................................................ 33

7.1 说明............................................................................................................ 33

7.2 步骤............................................................................................................ 34

7.2.1 第一步:创建JPA项目.................................................................. 34

7.2.2 第二步:生成JPA代码.................................................................. 35

7.2.3 第三步:导入所需jar依赖........................................................... 43

7.2.4 第四步:更新项目......................................................................... 44

8 JPQL语言............................................................................................................. 44

8.1 说明............................................................................................................ 44

8.2 示例代码.................................................................................................... 44

8.3 JPQL补充:N+1问题............................................................................... 48

1 JPA概述

1.1 JPA是什么

JPA (Java Persistence API) Java持久化API。是一套Sun公司 Java官方制定的ORM方案,是规范,是标准 ,sun公司自己并没有实现

关注点: ORM ,标准 概念 (关键字)

1.1.1 ORM是什么

ORM(Object Relational Mapping) 对象关系映射。

问:ORM有什么用?

在操作数据库之前,先把数据表与实体类关联起来。 然后通过实体类的对象操作(增删改查)数据库表,这个就是ORM的行为!

所以:ORM是一个实现使用对象操作数据库的设计思想!!!

通过这句话,我们知道JPA的作用就是通过对象操作数据库的,不用编写sql语句。

1.2 JPA的实现者

既然我们说JPA是一套标准,意味着,它只是一套实现ORM理论的接口。没有实现的代码。

那么我们必须要有具体的实现者才可以完成ORM操作功能的实现!

市场上的主流的JPA框架 (实现者)有:

Hibernate (JBoos)、EclipseTop(Eclipse社区)、OpenJPA (Apache基金会)。

其中Hibernate是众多实现者之中,性能最好的。所以,我们本次教学也是选用Hibernate框架作为JPA的主讲框架。

提醒: 学习一个JPA框架,其他的框架都是一样使用

1.3 JPA的作用是什么(问题)

JPA是ORM的一套标准,既然JPA为ORM而生,那么JPA的作用就是实现使用对象操作数据库,不用写SQL!!!.

问题:数据库是用sql操作的,那用对象操作,由谁来产生SQL?

答:JPA实现框架

2 入门示例

任何框架的学习,都建议从配置流程图开始。所以我们来一起理解JPA的配置流程图。

2.1 配置流程图

1.我们需要一个总配置文件persistence.xml存储框架需要的信息 (注意,文件名不要写错,而且必须放在classpath/META-INF文件夹里面)

2.我们需要一个Persistence持久类对象来读取总配置文件,创建实体管理工厂对象

3.我们需要实体管理工厂获得数据库的操作对象实体管理对象EntityManager。

4.我们通过EntityManager操作数据库之前,必须要先配置表与实体类的映射关系,从而实现使用对象操作数据库!!!

2.2配置步骤说明

第一步:导入包 (不管什么框架,首先要做的事情)

第二步:创建一个总配置文件

第三步:创建一个JPAUtils获得操作对象EntityManager

第四步:创建一个实体类,并且配置好映射注解

第五步:在总配置文件加载实体类

第六步:测试代码(需求:插入数据到用户表)

2.3配置步骤

需求:编写一个JPA的项目,插入一条数据到学生信息表。

2.3.1第一步:创建Maven项目

说明:我们这里是基于hibernate实现的,所以要导入Hibernate的JPA规范包

--使用maven构建的配置--

2.3.2 第二步:创建一个总配置文件

注意:文件必须放在classpath:/META-INF/persistence.xml

说明:Eclipse已经支持了JPA框架,所有不需要配置xsd文件,直接使用

配置信息如下:

2.3.3 第三步:封装JPAUtils工具类

创建一个工具类JPAUtils,获得操作对象(EntityManager)

2.3.4 第四步:创建映射实体类

创建一个映射的实体类,将JPA的映射注解写在实体类里面。

2.3.5 第五步:在总配置文件中加载映射实体类

2.3.6 第六步:操作实体类保存数据

创建一个StudentDAOTest类,测试保存一个学生。

测试结果

通过操作实体对象保存数据成功!!!

2.4 使用JPA的好处

使用JPA,可以直接使用对象操作数据库,由框架根据映射的关系生成SQL。不用开发人员编写。这样做,开发人员就不用编写SQL语句了

问题:这样有什么好处呢?

答:不同的数据库的SQL语法是有差异,如果不需要编写SQL语句。就屏蔽各种数据库SQL的差异。那么,编写的代码就可以一套代码兼容多种数据库!!!!

3 JPA实现CRUD

修改StudentDAOTest类,测试crud操作

4 JPA常用 API说明

4.1 映射注解说明

4.2 JPA常用API说明

5JPA多表关联查询

多个关联查询作用(导航查询):就是实现使用一个实体类对象查询多个表的数据。

配置多表联系查询必须有两个步骤;

1)、在实体类里面建立表与表之间的关系。

2)、在实体类配置关联关系,JPA使用注解配置

多表关联的E-R图如下:

根据ER图,创建数据库表!!!

5.1 一对多实现 (单向)

需求:通过ID查询一条学生表的记录,同时查询该学生的对应的成绩的信息!

5.1.1 说明

如图所示:一个学生可以有多条成绩的记录,一条成绩的记录只属于一个学生,所以学生表与成绩表的关系是一对多的关系。

所以,通过JPA配置一对多的关系,可以通过学生表对应的实体类对象同时获得两个表的数据。

5.1.2 配置步骤

5.1.2.1 第一步:创建项目

说明:复制入门示例的项目即可。

5.1.2.2 第二步:创建单表实体类

(1)创建Student类

(2)创建Score类

5.1.2.3 第三步:配置一对多关联关系

说明:通过@OneToMany注解配置。

修改Student类,配置一对多关系。

5.1.2.4 第四步:测试一对多查询

查询结果:

一对多关联查询成功!!!

5.2 多对一实现 (单向)

5.2.1 说明

需求:通过ID查询一条成绩表的记录,同时查询该成绩的对应的学生的信息!

如图所示:成绩表里面,每一条记录只能对应一个学生,但是学生编号不是唯一的。所以成绩表里面的多条数据可以对应一个学生,所以我们称多对一的关系。

5.2.2 配置步骤

5.2.2.1 第一步:创建项目

复制一对多示例项目即可。

5.2.2.2 第二步:创建单表实体类

修改Student类,去掉一对多配置即可。

5.2.2.3 第三步:配置多对一关联关系

修改Score类,配置多对一关系

5.2.2.4 第四步:测试

查询结果:

多对一配置成功!!!

5.3 双向一对多|多对一(了解)

5.3.1 说明

(1)查询学生信息,同时查询成绩信息。

(2)查询成绩信息,同时也可以查询学生信息。

5.3.2 配置步骤

在同一个项目中,在Student类和Score类中,同时配置关联关系。

(1)在Student类中配置一对多

(2)在Score类中配置多对一

5.4 一对一实现

5.4.1 说明

需求:通过ID查询学生的信息,通过也获得学生对应的学生身份信息。

5.4.2 配置步骤

5.4.2.1 第一步:创建项目

复制一对多的示例项目即可。

5.4.2.2 第二步:创建单表实体类

(1)创建Student类

(2)创建Identity类

5.4.2.3 第三步:配置一对一关联关系

说明:一对一关联关系,也是支持双向配置的。

可以在Student类、Identity类中同时配置关联关系。

(1)修改Student类,配置一对一关系。

(2)修改Score类

5.4.2.4 第四步:测试

说明:可以分别测试方向一对一关系。

(1)测试学生关联身份信息

测试结果:

(2)测试身份信息关联学生。

一对一配置成功!!!

5.5 配置多对多

5.5.1 说明

需求:

(1)通过ID查询学生的信息,通过该学生信息也获得对应的教师信息。

(2)通过ID查询教师的信息,通过教师信息也获得该对应的学生信息。

如图所示:一个学生可以有多个教师,一个教师也可以有多个学生,所以学生和教师的关系是多对多的关系。

如上图所示:

如果要从学生表的信息获得教师表的信息。必须需要三个条件

1.必须需要有一个中间表

2.必须需要中间表对应本表的外键

3.必须需要中间表对应关联表的外键

5.5.2 配置步骤

5.5.2.1 第一步:创建项目

复制一个示例项目即可。

5.5.2.2 第二步:创建单表实体类

学生实体类Student

教师实体类Teacher

5.5.2.3 第三步:配置多对多关系

(1)学生关联教师,修改Student类

(2)教师关联学生,修改Teacher类

5.5.2.4 测试

5.5.2.4.1 Step1:测试学生关联教师

测试代码

测试结果:

5.5.2.4.2 Step2:测试教师关联学生

测试代码

测试结果:

多对多配置成功!!!

6 JPA逆向工程

6.1 说明

所谓的逆向工程就是通过数据库的结构生成代码。

目的:提高开发的效率

6.2 步骤

6.2.1 第一步:创建JPA项目

(1)创建项目

(2)指定项目名、JPA版本

(3)完成创建

6.2.2 第二步:生成JPA代码

右击项目的src文件夹,选择new --> Other.. -->JPA的JPA Entities from Tables

6.2.2.1 Step1:创建新的数据库连接

(1)选择新建数据库连接

(2)指定数据库类型

(3)新建数据库驱动

(4)配置驱动信息

驱动版本号

加载驱动jar包

配置jdbc四要素

6.2.2.2 Step2:配置表与表直接的关联关系

(1)配置表关联关系

选择表,全选即可。

配置Student、Score一对多

依次配置其它的关联关系即可。

6.2.2.3 Step3:指定生成实体类的名称及结构

(1)修改关联对象的属性名

指定实体类的生成属性

指定实体类的类名

依次修改其它类的属性即可。

6.2.2.4 Step4:生成代码

6.2.3 第三步:导入所需jar依赖

说明:Maven项目是可以导入jar包到本地的。

方法:打开DOS窗口,进入项目的pom文件所在目录,执行命令:

mvn dependency:copy-dependencies

前提:已经配置了Maven环境变量。

6.2.4 第四步:更新项目

7JPQL语言

7.1说明

JPQL : Java Persistence Query Language : java持久化查询语言。

它的作用是通过类似SQL的语法去操作实体类的对象。

语法和SQL一样的,SQL操作的数据表,JPQL操作的对象

作用:实现个性化的查询需求

7.2示例代码

7.3 JPQL补充:N+1问题

在一对多或者多对多查询过程中,首先查询1这一方的数据,然后根据1这一份的数据,查询多的一方的数据。

当学生有N个的时候,总共查询次数N+1次。

这个就称之为N+1问题

当我们数据库的量不大的时候,N+1问题基本没有什么影响。如果当数据量很大的时候,查询数据库的次数,就很大了,这个就会影响数据库的性能。

如何解决这个问题?

可以通过JPQL来解决。

执行结果:

执行过程中,确实一条sql语句!!!

解决了频繁查询数据库,带来的数据库性能损耗。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。