idea jpa方法 自动提示_JPA【入门篇】

759dd44c28fe46e7af94b3deda98c89f.png

摘要:本文主要介绍JPA和JPA移植,通过一个简单的入门案例来学习JPA,知道JPA是什么,和传统的ORM框架的区别。

1. 概述

1.1. JPA是什么

JPA 是Java Persistence API的缩写,是一套由Java官方制定的ORM 标准。当制定这套标准以后,市场上就出现很多JPA框架。如:OpenJPA(apache),EclipseTop(linktop)(eclipse),Hibernate。

1.2. 相关故事

自从Hibernate框架被JBoss公司收购之后,作者Gavin King也加入了JBoss公司,不久就开始与JBoss管理者的理念产生了分歧。最后还是离开了Jboss公司,加入到了java官方sun公司。在Sun公司期间就将ORM的理念作为标准发布,这个标准就是JPA。

当JPA出现后,基于JPA标准的ORM框架象雨后的春笋大量出现。其中比较出名的有:Apache基金会的OpenJPA,Eclipse社区的EclipseTop。标准化ORM的出现,直接威胁到了原来的ORM框架Hibernate。因此Hibernate框架不得不应战,于是也开始了对JPA标准的支持。

由于Hibernate的历史原因,Hibernate对JPA标准的支持有两套,兼容性的支持和完全性的支持。

1. 兼容性的支持:操作的接口使用Hibernate原来制定的,只有映射的注解使用JPA标准接口提供。
2. 完全性的支持:操作的接口和映射的注解全部使用JPA的标准。

1.3. Hibernate使用JPA规范解决了什么问题

使用注解来替代配置文件。

--问题:注解的作用?

注解的作用其实就是代替配置文件,将程序的元数据写在代码上,所谓的元数据就是,程序必须依赖的数据。

--问题:为什么需要使用注解替代配置文件呢?

答:配置文件不是编程语言的语法,所以是无法断点调试。而注解是Java语法,报错的时候可以 快速的定位问题

2. 兼容性地支持JPA规范

2.1. 说明

Hibernate兼容性支持JPA规范:就是操作的接口是Hibernate原来指定的,只有映射注解使用JPA标准接口提供的。

2.2. 需求

将一个原来使用xml配置的入门示例修改使用注解实现,仅仅将映射文件修改为注解,其他不变。

2.3. 配置步骤

第一步:删除掉XML映射文件

4d2a6047381dc273575cfaa6fee60857.png

第二步:将映射的注解写在实体类里面

// @Entity注解,指定该实体类是一个基于JPA规范的实体类

第三步:修改总配置文件hibernate.cfg.xml加载的是映射的实体类

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>

        <!-- 配置DB连接4要素 -->
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?serverTimezone=UTC</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>

        <!-- 配置映射实体类 -->
        <mapping class="org.brick.pojo.Student" />

    </session-factory>
</hibernate-configuration>

第四步:测试(就原来的代码)

@Test

3. 完全性地支持JPA标准

所谓Hibernate框架完全性地支持JPA标准,就是操作框架的API和映射注解都全部使用JPA的标准来实现。

意思就是不使用Hibernate原来的接口和类,而使用由JPA标准规范制定的类和接口来实现。那么入门Hibernate-JPA,只需知道JPA规范使用了哪些类名和接口名来替代原来Hibernate的操作类和接口即可。

3.1. JPA配置流程图

[1] 需要一个总配置文件存储框架需要的信息。(注意:配置文件必须要放在classpath:/META-INF/persistence.xml)
[2] 需要通过Persistence类来获得配置文件的信息,构造EntityManagerFactory(实体管理工厂)
[3] 通过实体管理工厂对象获得操作类对象,实体管理类对象。
[4] 操作类操作数据库表之前,必须要配置一个和数据表关联的实体类(有关联注解的),不要忘了在总配置文件加载实体类。

3.2. 入门示例

3.3. 配置步骤说明

1. 导入包
2. 创建一个总配置文件(persistence.xml)
3. 创建一个帮助类,JPAUtils。获得操作对象(EntityManager)
4. 创建一个实体类,并且配置映射的注解
5. 创建一个测试类--插入

3.4. 需求

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

3.5. 配置步骤

第一步:搭建环境

方式一(自行导入所需jar包)

--HIbernate支撑包

a7dc2e0c00db724a095ff4e8c6663f7a.png

--HIbernate的JPA规范的实现包,完全性支持JPA必须加入

3b480064588e3f837ca0f6dd5b406468.png

--驱动包--

75ff44992f5d2d0d965ce4be4c351762.png

方式二(导入依赖,推荐方式)

--hibernate+JPA依赖

 <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.4.1.Final</version>
</dependency>

--驱动包依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.18</version>
</dependency>
第二步:创建一个总配置文件

注意:总配置文件必须放在”classpath:/META-INF/persistence.xml”路径下。

如果想要IDEA创建一个JPA总配置文件,需要添加一个JPA模块,随后可以生成配置文件到项目中。

--总配置文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">

    <!-- 持久单元,配置一个数据库连接 -->
    <persistence-unit name="mysql-jpa">
        <!-- DB连接四要素 -->
        <properties>
            <!-- 这里使用Hibernate-JPA -->
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate?serverTimezone=UTC"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value="root"/>
            <!-- 格式化输出SQL语句 -->
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>
第三步:创建一个工具类JPAUtils

创建一个工具类JPAUtils,获得操作对象。

public 
第四步:创建一个映射的实体类

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

@Entity

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

修改persistence.xml,配置映射实体类。

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">

    <!-- 持久单元,配置一个数据库连接 -->
    <persistence-unit name="mysql-jpa">

        <!-- 配置实体类 -->
        <!-- 注意:Hibernate-JPA实现了自动配置映射实体类,所以不配置也是可以的,但是建议还是加上这个配置,方便后期维护 -->
        <class>org.brick.pojo.Student</class>

        <!-- DB连接四要素 -->
        <properties>
            <!-- 这里使用Hibernate-JPA -->
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate?serverTimezone=UTC"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value="root"/>
            <!-- 格式化输出SQL语句 -->
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>
第六步:测试

--测试代码

@Test

3.6. 将Hibernate配置的纯JPA代码移植到OpenJPA

3.6.1. 说明

如果代码使用JPA标准编写,那么不修改java代码代码,而只需修改一下配置文件,即可将HIbernate的代码移植到其他的JPA框架(OpenJPA、EclipseTOP)。

注意:Hibernate是这么多JPA框架里面,性能最好的一个!

3.6.2. 示例代码

通过这个示例,可以证明只要符合JPA规范的代码,可以在基于JPA规则的框架相互切换。

不修改代码,只修改了配置文件,如下:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <!-- 持久单元,配置一个数据库连接 -->
    <persistence-unit name="mysql-jpa">

        <!-- 配置实体类 -->
        <class>org.brick.pojo.Student</class>

        <!-- DB连接四要素 -->
        <properties>
            <!-- 这里使用Open-JPA -->
            <property name="ConnectionDriverName" value="com.mysql.cj.jdbc.Driver"/>
            <property name="ConnectionURL" value="jdbc:mysql://localhost:3306/hibernate?serverTimezone=UTC"/>
            <property name="ConnectionUserName" value="root"/>
            <property name="ConnectionPassword" value="root"/>
        </properties>
    </persistence-unit>
</persistence>

注意:OpenJPA使用的是JPA2.0规范,而Hibernate使用的是JPA2.1规范。所以将Hibernate编写的JPA代码切换OpenJPA的代码,需要修改配置文件版本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值