JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体到数据库中。
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。
起源
JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分。但它又不限于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。JPA的宗旨是为POJO提供持久化标准规范,由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便开发和测试的理念已经深入人心了。Hibernate3.2+、TopLink 10.1.3以及都提供了JPA的实现。
JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:
ORM映射元数据
JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体到数据库表中;
API
用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
查询语言
这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
(此部分摘录于360百科)
=======================================================================================================================
1.1 JPA是什么
JPA (Java Persistence API) Java持久化API。是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没有实现
关注点: ORM ,标准 概念 (关键字)
1.1.1 ORM是什么
ORM(Object Relational Mapping) 对象关系映射。
问:ORM有什么用?
在操作数据库之前,先把数据表与实体类关联起来。 然后通过实体类的对象操作(增删改查)数据库表,这个就是ORM的行为!
所以:ORM是一个实现使用对象操作数据库的设计思想!!!
通过这句话,我们知道JPA的作用就是通过对象操作数据库的,不用编写sql语句。
1.2 JPA的实现者
既然我们说JPA是一套标准,意味着,它只是一套实现ORM理论的接口。没有实现的代码。
那么我们必须要有具体的实现者才可以完成ORM操作功能的实现!
市场上的主流的JPA框架 (实现者)有:
Hibernate (JBoos)、EclipseTop(Eclipse社区)、OpenJPA (Apache基金会)。
其中Hibernate是众多实现者之中,性能最好的。所以,我们本次教学也是选用Hibernate框架作为JPA的主讲框架。
提醒: 学习一个JPA框架,其他的框架都是一样使用
1.3JPA的作用是什么(问题)
JPA是ORM的一套标准,既然JPA为ORM而生,那么JPA的作用就是实现使用对象操作数据库,不用写SQL!!!.
问题:数据库是用sql操作的,那用对象操作,由谁来产生SQL?
答:JPA实现框架
1.4 使用JPA的好处
使用JPA,可以直接使用对象操作数据库,由框架根据映射的关系生成SQL。不用开发人员编写。这样做,开发人员就不用编写SQL语句了。
问题:这样有什么好处呢?
答:不同的数据库的SQL语法是有差异,如果不需要编写SQL语句。就屏蔽各种数据库SQL的差异。那么,编写的代码就可以一套代码兼容多种数据库!!!!
1.5 映射注解说明
注解 | 说明 |
@Entity | 声明该实体类是一个JPA标准的实体类 |
@Table | 指定实体类关联的表,注意如果不写表名,默认使用类名对应表名。 |
@Column | 指定实体类属性对应的表字段,如果属性和字段一致,可以不写 |
@Id | 声明属性是一个OID,对应的一定是数据库的主键字段 |
@GenerateValue | 声明属性(Object ID)的主键生成策略 |
@SequenceGenerate | 使用SEQUENCE策略时,用于设置策略的参数 |
@TableGenerate | 使用TABLE主键策略时,用于设置策略的参数 |
@JoinTable | 关联查询时,表与表是多对多的关系时,指定多对多关联表中间表的参数。 |
@JoinColumn | 关联查询时,表与表是一对一、一对多、多对一以及多对多的关系时,声明表关联的外键字段作为连接表的条件。必须配合关联表的注解一起使用 <key> |
@OneToMany | 关联表注解,表示对应的实体和本类是一对多的关系 |
@ManyToOne | 关联表注解,表示对应的实体和本类是多对一的关系 |
@ManyToMany | 关联表注解,表示对应的实体和本类是多对多的关系 |
@OneToOne | 关联表注解,表示对应的实体和本类是一对一的关系 |
1.6 JPA常用API说明
API | 说明 |
Persistence | 用于读取配置文件,获得实体管理工厂 |
EntityManagerFactory | 用于管理数据库的连接,获得操作对象实体管理类 |
EntityManager | 实体管理类,用于操作数据库表,操作对象 |
EntityTransaction | 用于管理事务。开始,提交,回滚 |
TypeQuery | 用于操作JPQL的查询的 |
Query | 用于操作JPQL的查询接口,执行没有返回数据的JPQL(增删改) |
CriteriaBuilder | 用户使用标准查询接口 Criteria查询接口 |