JPA的API
EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
//创建实体管理类
EntityManager em = factory.createEntityManager();
//获取事务对象
EntityTransaction tx = em.getTransaction();
//开启事务
tx.begin();
Customer c = new Customer();
c.setCustName("传智播客");
//保存操作
em.persist(c);
//提交事务
tx.commit();
//释放资源
em.close();
factory.close();
Persistence对象
- 主要作用:创建实体管理类工程----->获取
EntityManager
对象。
通过调用该类的createEntityManagerFactory
静态方法,根据配置文件中的持久化单元名称创建EntityManager
String unitName = "myJpa";
EntityManagerFactory factory= Persistence.createEntityManagerFactory(unitName);
EntityManagerFactory接口
EntityManagerFactory
接口主要用来创建EntityManager
实例,其内部维护了很多信息
- 比如数据库信息
- 比如缓存信息
- 维护所有的实体管理对象
//创建实体管理类
EntityManager em = factory.createEntityManager();
- 创建
EntityManagerFactory
时十分浪费资源
由于EntityManager
是一个线程安全的对象,并且EntityManager
的创建及其浪费资源,所以在使用jpa编程时,我们可以对EntityManagerFactory
的创建进行优化,做到一个工程只存在一个EntityManagerFactory
EntityManager对象
在jap规范中,EntityManager
是完成持久化操作的核心对象。实体类作为普通的java
对象,只有在调用EntityManager
将其持久化之后才会变成持久化对象。EntityManager
对象在一组实体类和底层数据源之间进行O\R映射的管理。它可以用来管理和更新Entity Bean
,根据主键查找Entity Bean
,还可以通过JPQL
语句查询实体
我们可以通过调用EntityManager
的方法完成获取事务,以及持久化数据库的操作。
方法说明:
getTransaction
: 获取事务对象
persist
: 保存操作
merge
: 更新操作
remove
: 删除操作
find/getReference
: 根据id查询
EntityTransaction
在 JPA
规范中, EntityTransaction
是完成事务操作的核心对象,对于EntityTransaction
在我们的java
代码中承接的功能比较简单
begin
:开启事务
commit
:提交事务
rollback
:回滚事务
JPAUtil工具类
抽取JPAUtil工具类
package cn.itcast.dao;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public final class JPAUtil {
// JPA的实体管理器工厂:相当于Hibernate的SessionFactory
private static EntityManagerFactory em;
// 使用静态代码块赋值
static {
// 注意:该方法参数必须和persistence.xml中persistence-unit标签name属性取值一致
em = Persistence.createEntityManagerFactory("myPersistUnit");
}
/**
* 使用管理器工厂生产一个管理器对象
*
* @return
*/
public static EntityManager getEntityManager() {
return em.createEntityManager();
}
}
验证JPAUtil工具类
@Test
public void test() {
//创建实体管理类
EntityManager em = JPAUtil.getEntityManager();
//获取事务对象
EntityTransaction tx = em.getTransaction();
//开启事务
tx.begin();
Customer c = new Customer();
c.setCustName("传智播客");
//保存操作
em.persist(c);
//提交事务
tx.commit();
//释放资源
em.close();
}