Persistence-API高级教程

一、概述

Persistence-API是Java EE的规范标准之一。

它定义了一种标准的ORM(Object-Relational Mapping)模型,使得Java开发人员可以通过简单的API来与关系性数据库进行交互,而无需关注特定的数据库厂商的实现细节。

ORM技术的出现是为了解决面向对象编程和关系数据库存储之间的映射问题。

简言之,这个标准次要把关系型数据库(Relational Database,RDB)中的表数据映射成Java对象,让开发人员可以操作Java对象,而不用担心查询和存储数据在数据库中时的问题。

二、Entity

在Persistence-API中,一个Entity就代表一个Java对象(POJO),这个对象的属性映射到数据库表中的列。

在Entity类上使用@Entity注解来指定这个类是个Entity,@Table注解来指定这个实体对应的表名。

下面是一个简单的实体类的例子:

@Entity
@Table(name = "employee")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private Integer age;

    // 省略getter/setter方法
}

在这个例子中,@Id注解表示这个属性是实体类的主键;@GeneratedValue注解表示这个属性的值是自动生成的,生成策略是IDENTITY;

三、EntityManager

EntityManager是Persistence-API操作Entity的核心API,它提供了标准的CRUD操作,例如:find、persist、remove、merge、createQuery等。

在使用EntityManager之前,需要先通过实体管理工厂(EntityManagerFactory)创建EntityManager。一个EntityManagerFactory代表一个数据源。

下面是如何获取EntityManager的例子:

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("example-unit");
EntityManager entityManager = entityManagerFactory.createEntityManager();

其中,”example-unit”是配置文件persistence.xml中的持久化单元名称。

通过entityManager,可以进行各种CRUD操作,例如:

// 查找Employee表中id为1的记录
Employee employee = entityManager.find(Employee.class, 1);

// 将实体对象employee添加进数据库
entityManager.persist(employee);

// 删除实体对象employee
entityManager.remove(employee);

// 更新实体对象employee
employee.setName("Tom");
entityManager.merge(employee);

// 根据HQL语句查询Employee对象列表
List<Employee> employeeList = entityManager.createQuery("FROM Employee", Employee.class).getResultList();

四、事务控制

由于EntityManager中对数据库的操作都需要依赖事务,所以在进行持久化操作时需要对事务进行控制。

默认情况下,EntityManager的事务是自动提交的,也就是每进行一次操作就会自动提交一次。为了更好地控制事务,应该手动控制事务的开启、提交和回滚。

下面是一个使用EntityManager进行事务控制的例子:

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("example-unit");
EntityManager entityManager = entityManagerFactory.createEntityManager();

// 开启事务
entityManager.getTransaction().begin();

// 执行持久化操作
Employee employee = new Employee();
employee.setName("Tom");
entityManager.persist(employee);

// 提交事务
entityManager.getTransaction().commit();

// 关闭EntityManager
entityManager.close();

// 关闭EntityManagerFactory
entityManagerFactory.close();

五、JPQL

JPQL(Java Persistence Query Language)是一种面向对象的查询语言,用于实现Object/Relational Mapping。它类似于SQL语句,但是它是面向对象的。

JPQL是由Persistence-API定义和规范,它不属于任何特定的实现,所以可以跨不同的关系型数据库使用。

JPQL支持SELECT、UPDATE、DELETE等语句。下面是一个JPQL查询例子:

List<Employee> resultList = entityManager
                .createQuery("SELECT e FROM Employee e WHERE e.age > :age", Employee.class)
                .setParameter("age", 30)
                .getResultList();

使用@Entity注解指定一个类是Entity,使用@Table注解指定一个Entity对应的表。使用EntityManager进行CRUD操作,通过手动控制事务来更好地控制数据的操作。

以上就是本文对Persistence-API的详细阐述。通过学习本文,相信你已经对Java EE中的ORM规范有了进一步的了解。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/269863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-16 13:33
下一篇 2024-12-16 13:34

相关推荐

  • MQTT使用教程

    MQTT是一种轻量级的消息传输协议,适用于物联网领域中的设备与云端、设备与设备之间的数据传输。本文将介绍使用MQTT实现设备与云端数据传输的方法和注意事项。 一、准备工作 在使用M…

    编程 2025-04-29
  • Python3.6.5下载安装教程

    Python是一种面向对象、解释型计算机程序语言。它是一门动态语言,因为它不会对程序员提前声明变量类型,而是在变量第一次赋值时自动识别该变量的类型。 Python3.6.5是Pyt…

    编程 2025-04-29
  • Deepin系统分区设置教程

    本教程将会详细介绍Deepin系统如何进行分区设置,分享多种方式让您了解如何规划您的硬盘。 一、分区的基本知识 在进行Deepin系统分区设置之前,我们需要了解一些基本分区概念。 …

    编程 2025-04-29
  • 掌握magic-api item.import,为你的项目注入灵魂

    你是否曾经想要导入一个模块,但却不知道如何实现?又或者,你是否在使用magic-api时遇到了无法导入的问题?那么,你来到了正确的地方。在本文中,我们将详细阐述magic-api的…

    编程 2025-04-29
  • 写代码新手教程

    本文将从语言选择、学习方法、编码规范以及常见问题解答等多个方面,为编程新手提供实用、简明的教程。 一、语言选择 作为编程新手,选择一门编程语言是很关键的一步。以下是几个有代表性的编…

    编程 2025-04-29
  • Qt雷达探测教程

    本文主要介绍如何使用Qt开发雷达探测程序,并展示一个简单的雷达探测示例。 一、环境准备 在开始本教程之前,需要确保你的开发环境已经安装Qt和Qt Creator。如果没有安装,可以…

    编程 2025-04-29
  • 猿编程python免费全套教程400集

    想要学习Python编程吗?猿编程python免费全套教程400集是一个不错的选择!下面我们来详细了解一下这个教程。 一、课程内容 猿编程python免费全套教程400集包含了从P…

    编程 2025-04-29
  • Python烟花教程

    Python烟花代码在近年来越来越受到人们的欢迎,因为它可以让我们在终端里玩烟花,不仅具有视觉美感,还可以通过代码实现动画和音效。本教程将详细介绍Python烟花代码的实现原理和模…

    编程 2025-04-29
  • 使用Snare服务收集日志:完整教程

    本教程将介绍如何使用Snare服务收集Windows服务器上的日志,并将其发送到远程服务器进行集中管理。 一、安装和配置Snare 1、下载Snare安装程序并安装。 https:…

    编程 2025-04-29
  • Python元祖排序:从基础知识到高级应用

    Python元祖是一种不可变序列,通常用于将一组数据绑定在一起。元祖之间经常需要排序,本文将从基础知识到高级应用,为你详细讲解Python元祖排序。 一、排序方法 Python提供…

    编程 2025-04-28

发表回复

登录后才能评论