Java EE-JPA

概念

  JPA(Java Persistence API,Java持久层API),是一个基于ORM(对象关系映射)的标准规范,用来处理程序与数据库之间的关系。JPA最早由EJB3.0专家组开发,是JSR220实现的一部分,它只定义标准规则,不提供具体实现,JPA实现通常被称为:持久化提供者(persistence provider),目前主要的JPA实现有:Hibernate、EclipseLink、OpenJPA等。

  现在,JPA不仅可以在Java EE程序中使用,也可以用于SE开发。

内容

Entity

  通过ORM框架,开发人员可以直接操作实体对象,进而把数据持久化到数据库中,无需编写SQL语句。每个Entity分别对应数据库表中的一条记录,Entity中的属性对应表中的字段。一个程序中常用的POJO(Plain Ordinary Java Object,普通JavaBean)通过添加@Entity注解便可以包装为持久化管理中的实体类。

@Entity
public class User implements Serializable {
  @Id
  private int id;
  private String name;

  //省略了 getter 和 setter 方法。
}

  默认情况下,实体名需要和表名一致,如果想使用别名,可以添加@Table(name=”“)注解。根据JPA规范,一个Entity类需要满足以下要求:

  • 包含 javax.persistence.Entity 注解(JDK1.5以上)
  • 提供无参的默认构造方法,可以被public或proteted修饰。
  • 不能声明为final
  • 如果实体对象需要通过网络传递,比如通过会话bean远程业务接口传递,需要实现 Serializable 接口
  • 可以继承其他类,或者被其他类继承
  • 持久化的实例变量必须保证只能通过方法来访问(private或protected声明)

persistence.xml

  JPA 规范要求,配置文件必须命名为 persistence.xml,并存在于类路径下的 META-INF 目录中,使用IDE创建JPA工程,会自动生成这些文件。persistence.xml文件定义了JPA配置的一些基本信息,比如:数据库连接的驱动、用户名、密码等。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="jpaTester" transaction-type="RESOURCE_LOCAL">
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mybatistest"/>
            <property name="javax.persistence.jdbc.user" value=""/>
            <property name="javax.persistence.jdbc.password" value=""/>
        </properties>
    </persistence-unit>
</persistence>

JPQL

  Java Persistence query language,基于实体的可移植查询语言,可以被编译为所有主流数据库的SQL,类似于Hibernate 中的HQL。JPQL与原生SQL语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表字段。一个简单的查询可能如下所示:

//创建一个EntityManager来执行查询,不理解可以先忽略
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpaTester");
EntityManager em = emf.createEntityManager();

//User是程序中定义的Entity,而非表名
Query q = em.createQuery("select u from User u");
List<User> userList= q.getResultList();

Criteria

  Java Persistence Criteria API,是JPA2.0的新特性。JPQL与SQL语法非常类似,对于熟悉SQL语句的程序员来讲,上手JPQL很容易,但是JPQL同样是基于字符串来申明的,也就意味着它无法在程序编译时检查语法错误,只会在运行时抛出异常。

  比如下面这样的情况:

//语法错误,可以通过编译,但是运行时会抛出异常
Query q = em.createQuery("select u from User");
//正确的JPQL查询语句
Query q = em.createQuery("select u from User u");

  使用Criteria API可以避免上述问题,同样查询User数据,可以表示为:

//需要先创建EntityManager em
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> u = cb.createQuery(User.class);
Root<User> user = u.from(User.class);
u.select(User);

参考资料

  1. JPA 2 Criteria API
  2. Java Persistence API
  3. Java persistence API - Tutorial
  4. JPA Tutorial - JPA Introduction
  5. Java EE 7 Platform API Specification
  6. 使用 Spring Data JPA 简化 JPA 开发

猜你喜欢

转载自blog.csdn.net/u013201439/article/details/80507542
今日推荐