目录
JPA 概述
一、什么是JDBC
通过数据库提供的API 去访问数据库,导致了连接数据库的方法都不一样。于是JDBC 提供了一种规范,但是JDBC里面并没有提供这种接口的实现类,然后各个数据库的厂商提供这种数据库的实现类,就有了JDBC的驱动jar包。所以,JDBC 实际上就是一组规范,接口,他统一了java程序访问数据库的标准。
二、JPA是什么
JPA统一了java应用程序使用各种ORM框架的方式。
JPA与hibernate的关系
1、JPA是hibernate的一个抽象(就像JDBC和JDBC驱动的关系)
①、JPA是规范:JPA本质上就是一种ORM规范,不是ORM框架——因为JPA并未提供ORM实现,它只是制定了一些规范,提供了一些编程的API接口,但具体实现则由ORM厂商提供实现
②、hibernate是实现:hibernate除了作为ORM框架之外,他也是一种JPA实现。
从功能上来说,JPA是hibernate功能的一个子集。
JPA的优势
①、标准化:提供相同的API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。
②、简单易用,集成方便:JPA的主要目标之一就是提供更加简单的编程模型,在Jpa 框架下创建实体和创建java类一样简单,只需要使用@Entity进行注释;JPA的框架和接口也都非常简单。
③、可媲美JDBC的查询能力:JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING等通常只有SQL才能够提供的高级查询特性,甚至还能够支持子查询。
④、支持面向对象的高级特性:JPA中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型。
JPA包括3方面的技术
①、ORM 映射元数据:JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
②、JPA的API :用操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
③、查询语言(JPQL):这是持久换操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序和具体的SQL紧密耦合。
简单的HelloWorld
使用JPA持久化对象的步骤:
1、创建 persistence.xml, 在这个文件中配置持久化单元 【persistence.xml是JPA最基本的配置文件】
①、需要指定跟哪个数据库进行交互;
②、需要指定 JPA 使用哪个持久化的框架以及配置该框架的基本属性
2、创建实体类, 使用 annotation 来描述实体类跟数据库表之间的映射关系.
3、使用 JPA API 完成数据增加、删除、修改和查询操作
①、创建 EntityManagerFactory (对应 Hibernate 中的 SessionFactory);
②、创建 EntityManager (对应 Hibernate 中的Session);
操作:用eclipse创建jpa
直接finish就可以了
1、导入jar包
2、persistence.xml :JPA 规范要求在类路径的 META-INF 目录下放置persistence.xml,文件的名称是固定的
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 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">
<persistence-unit name="jpa-1" transaction-type="RESOURCE_LOCAL">
<properties>
<!--
配置使用什么 ORM 产品来作为 JPA 的实现
1. 实际上配置的是 javax.persistence.spi.PersistenceProvider 接口的实现类
2. 若 JPA 项目中只有一个 JPA 的实现产品, 则也可以不配置该节点.
-->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- 添加持久化类 -->
<class>com.flx.helloworld.Customer</class>
<!-- 连接数据库的基本信息 -->
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="1230"/>
<!-- 配置jpa实现产品的基本属性,配置hibernate的基本属性 -->
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
3、实体类
4、Main
package com.flx.helloworld;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class Main {
public static void main(String[] args) {
//1.创建EntityManagerFactory
String persistenceUnitName = "jpa-1";
EntityManagerFactory entityManagerFactory =
Persistence.createEntityManagerFactory(persistenceUnitName);
//2.创建EntityManager
EntityManager entityManager = entityManagerFactory.createEntityManager();
//3.开启事务
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
//4.进行持久化操作
Customer customer = new Customer();
customer.setAge(12);
customer.setEmail("[email protected]");
customer.setLastName("Tom");
entityManager.persist(customer);
//5.提交事务
transaction.commit();
//6.关闭EntityManager
entityManager.close();
//7.关闭EntityManagerFactory
entityManagerFactory.close();
}
}
运行的结果:
(之前只是建了一个空的数据库)数据库: