java ee jpa_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配置的一些基本信息,比如:数据库连接的驱动、用户名、密码等。

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 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 u = cb.createQuery(User.class);

Root user = u.from(User.class);

u.select(User);

参考资料

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值