探究Java Persistence API的配置文件“persistence.xml

作者:佳木斯麻将开发公司 阅读:22 次 发布时间:2025-07-19 20:11:25

摘要:Java Persistence API (JPA) 是 Java EE 的一部分,它是一种 Java Object-Relational Mapping (ORM) 框架,为 Java 开发者提供了一种将 Java 对象映射到关系数据库的方法。其中需要注意的一个关键的配置文件就是 persistence.xml,它是 JPA 的配置文件,本文将会介绍该文件的...

Java Persistence API (JPA) 是 Java EE 的一部分,它是一种 Java Object-Relational Mapping (ORM) 框架,为 Java 开发者提供了一种将 Java 对象映射到关系数据库的方法。其中需要注意的一个关键的配置文件就是 persistence.xml,它是 JPA 的配置文件,本文将会介绍该文件的内容和语法,以及如何使用它来访问和管理数据库。

探究Java Persistence API的配置文件“persistence.xml

一、persistence.xml的基本结构

persistence.xml 是一个 XML 文件,需要放置在 Java 项目的 src/main/resources/META-INF 目录下,它包含了 JPA 中的所有配置信息。以下是一个标准的 persistence.xml 文件的基本结构:

```xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"

version="2.0">

```

- persistence: 根元素,指定了 XML 文件的命名空间,XML 的版本和 JPA 的命名空间。

- persistence-unit: JPA 的一个单元,必须指定名字,transaction-type 官方只提供了两种类型,一个是 JTA,另一个是 RESOURCE_LOCAL。

二、persistence.xml的参数配置

在 persistence.xml 文件中,还需要配置一些参数,以便于连接数据库,进行一系列操作。下面我们将会介绍一些常用的参数配置,并给出相关的实例:

1. Provider

定义了使用哪一个 JPA 规范的实现提供者,默认情况下,Hibernate 是最常见的 JPA 实现提供者。对于 Hibernate 来说,provider 的值应该为 org.hibernate.jpa.HibernatePersistenceProvider。而如果可以使用 EclipseLink,它的 provider 值应该为 org.eclipse.persistence.jpa.PersistenceProvider。

```xml

org.hibernate.jpa.HibernatePersistenceProvider

```

2. JPA 实体类的位置

在 persistence.xml 文件中,需要指定 JPA 实体类所在的位置。假设 JPA 实体类都在 com.example.entity 包之下,则配置代码如下:

```xml

com.example.entity.<实体类的名称>

```

若有多个,可以使用逗号分隔开,例如:

```xml

com.example.entity.User

com.example.entity.Article

```

3. 数据库连接

在 persistence.xml 中,需要配置数据库连接的相关参数,包括连接 URL、账号和密码等。

```xml

```

这里的 name 属性均是固定名称,value 表示具体配置的参数值。

4. 是否自动创建、更新表

如果希望在应用启动时完成表的创建和更新操作,可以设置 hibernate.hbm2ddl.auto 参数。该参数有以下几个值:

- create: 创建表,如果表已存在,则先删除之前的,再重新创建。

- create-drop: 创建表,应用退出时删除表。

- update: 更新表,如果表不存在则创建。

- validate: 验证表结构是否合法,如果不合法,则抛出异常。

例如,设置自动创建表可使用以下配置:

```xml

```

5. 清除缓存

在持久化数据过程中,为了减少查询数据库的次数,可以考虑将数据进行缓存。缓存的目的是在获得大量数据时,减少数据库查询的次数,更好地提高性能。 p.persistence.xml 文件中,可以设置 hibernate.cache.use_second_level_cache 参数来开启缓存。例如:

```xml

```

其它缓存相关的配置项包括:

- hibernate.cache.region.factory_class: 为缓存提供工厂类;

- hibernate.cache.use_query_cache: 是否使用查询缓存。

三、persistence-unit 的各种属性参数配置解释:

从上文示例中可以看出,persistence.xml 文件中的重要组成部分是 persistence-unit 标签。该标签的返回值为 EntityManagerFactory 实例,EntityManagerFactory 是创建 EntityManager 的工厂类。

persistence-unit 标签支持如下参数:

1. name

名称作为唯一标识符。当该标签包含在 persistence.xml 文件中时必须指定该名称;

2. transaction-type

事务类型可取值为:

- JTA: 此时事务由容器(如 Tomcat 等)负责管理,可以使用 JNDI 等方式连接数据源。

- RESOURCE_LOCAL:此时事务由程序控制,不能使用 JNDI 方式连接数据源,需要配置 URL、数据库驱动和用户名密码等信息。

3. jta-data-source

当 transaction-type 取值为 JTA 时,需要指定 JNDI 数据源。例如:

```xml

java:jboss/datasources/mysqlDS

```

4. non-jta-data-source

当 transaction-type 取值为 RESOURCE_LOCAL 时,需要指定应用与之相关联的数据源。例如:

```xml

java:jboss/datasources/mysqlDS

```

5. provider

指定 JPA 的提供者。例如:

```xml

org.hibernate.jpa.HibernatePersistenceProvider

```

6. exclude-unlisted-classes

是否引入指定的实体类。默认情况下,JPA 会引入所有与 persistence-unit 标签在同一包下的所有实体类。当 exclude-unlisted-classes 的值为 true 时,则只会引入已经被列举出来的实体类。

7. shared-cache-mode

配置缓存的使用选项。可取值为:

- NONE: 不使用缓存;

- ALL: 所有实体都将使用缓存;

- ENABLE_SELECTIVE: 只有被标记为 @Cacheable 的实体才会被缓存。

8. validation-mode

指定实体类是否需要验证。可取值为:

- AUTO: 自动验证,如果实体类使用 Hibernate Validator,则会自动验证。

- CALLBACK: 仅调用实体类中定义的回调函数。用户需要自己在实体类中实现回调函数。

- NONE: 不验证实体类。

四、对persistence.xml文件的使用

在使用 Hibernate 时,通常的做法是在数据库中创建一个 schema 或者 data base,与此同时实体类就会自动生成在数据库中。这部分可以使用 Hibernate 的 hibernate.hbm2ddl.auto 参数帮助我们解决,其设置方式使用的就是前面提到的 persistence.xml 的内容:

```xml

```

创建之后,在实体类上添加注解来实现数据库表与 Java 类的映射关系。

例如,我们可以用以下注解来实现 User 的映射:

```java

@Entity

@Table(name = "t_user")

public class User {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private int id;

@Column(name = "username")

private String username;

@Column(name = "password")

private String password;

@Column(name = "email")

private String email;

}

```

以上实例中,@Entity 表示该类是实体类,@Table 指明了对应的数据库表,@Id 指明了主键属性,@GeneratedValue 定义主键生成策略为 IDENTITY 字段自增长,@Column 表示字段的映射。

接下来,将使用 EntityManager 的实现类 EntityManagerFactory 来建立与数据库之间的连接,并进行简单的 CRUD 操作。其中需要注意的是,EntityManager 的实现类 EntityManagerFactory 常用于初始化 EntityManager,代码如下:

```java

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("PU_NAME");

EntityManager entityManager = entityManagerFactory.createEntityManager();

```

这与使用 SessionFactory 来生成 Session 的方式类似。entityManager.close() 方法可以用于结束大量的数据库查询操作。这种方式跟使用 JDBC 进行数据库操作的方法有很大的不同,因为它让操作变得更加的面向对象,具体示例如下:

```java

// 向数据库中添加 User 和 Blog (只创建 MyUser 还是会创建 MyBlog,表中不包含对应字段的 USER_ID 与 BLOG_ID,但是实体类是有的)

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("PU_NAME");

EntityManager entityManager = entityManagerFactory.createEntityManager();

entityManager.getTransaction().begin();

User user = new User();

user.setUsername("ylf");

user.setPassword("123");

user.setEmail("ylf@gmail.com");

Blog blog = new Blog();

blog.setTitle("My blog");

blog.setContent("This is my blog.");

entityManager.persist(user);

entityManager.persist(blog);

entityManager.flush();

entityManager.getTransaction().commit();

// 从数据库中查询所有 User

entityManager.getTransaction().begin();

List userList = entityManager.createQuery("from User", User.class).getResultList();

for (User u : userList) {

System.out.println(u.toString());

}

entityManager.getTransaction().commit();

```

上述代码中,我们从数据库中查询了所以 User,使用了 JPA 自带的 HQL 语句进行查询,效果与之前的 SQL 语句相同。最后,执行 EntityManager 的 flush 方法,将操作刷新到数据库中。

五、总结

persistence.xml 是 Java Persistence API 中非常重要的配置文件,它用于设置 JPA 的各种参数,连接数据库,并进行 CRUD 操作。在使用它时,需要了解它的各种参数以及如何配置,也需要了解 EntityManagerFactory 的使用以及如何使用 HQL 语句进行查询操作。这些都是 JPA 中非常重要的内容,希望本文能够对使用者有所帮助。

  • 原标题:探究Java Persistence API的配置文件“persistence.xml

  • 本文链接:https://qipaikaifa.cn/zxzx/20757.html

  • 本文由深圳中天华智网小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与中天华智网联系删除。
  • 微信二维码

    ZTHZ2028

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:157-1842-0347


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部