JPA API的核心在于EntityManager的操作,EntityManager接口虽然小但是却非常简单,而且其功能非常完整,提供有效的持久化基础结构。在某种程度上,EntityManager是面向对象和数据库关系领域之间的桥梁。如下图所示:
当我们要创建域实体时,EntityManager把实体转换成新的数据库记录;当我们要更新实体时,EntityManager将找到对应实体的关系数据并且更新它;当我们要删除实体时,EntityManager删除关系数据。接下来我们就来看看它最基础的CRUD功能代码。
持久化实体:下面这段代码实现的就是使用persist方法将数据持久化到数据库中。
public void getPerson(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa");
EntityManager em = factory.createEntityManager();
Person person = new Person ();
person .setId(null);
person .setUserName("张三");
em.persist(person );
em.close();
factory.close();
}
persist方法的目的就是在数据库中创建新的实体记录,而不是更新已有记录。
查找对象:
(1)通过find查找对象
public void getPerson1(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa");
EntityManager em = factory.createEntityManager();
//相当于Hibernate中的get方法
Person person = em.find(Person.class, 1);
System.out.println(person.getUserName());
em.close();
factory.close();
}
(2)通过getReference查找对象
public void getPerson2(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa");
EntityManager em = factory.createEntityManager();
//相当于Hibername中的load方法,延迟加载
Person person = em.getReference(Person.class, 1);
System.out.println(person.getUserName());
em.close();
factory.close();
}
find方法相当于Hibernate中的get方法,getReference方法相当于Hibernate中的load方法,具有延迟加载的作用;当查找的对象不存在时,find的方法返回null值,而getReference方法则抛出异常javax.persistence.EntityNotFoundException
更新对象:
public void update(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Person person = em.find(Person.class, 1);
person.setUserName("kate");
em.getTransaction().commit();
em.close();
factory.close();
}
将游离状态下的数据更新到数据库中
public void updatePerson(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Person person = em.find(Person.class, 1);
//把实体管理器中的实体变成游离状态
em.clear();
person.setUserName("jerry");
//把游离状态下的更新同步到数据库中
em.merge(person);
em.getTransaction().commit();
em.close();
factory.close();
}
删除:
public void delete(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Person person = em.find(Person.class, 1);
em.remove(person);
em.getTransaction().commit();
em.close();
factory.close();
}
这些是最基本的一些EntityManager的接口方法及实习功能,你用过了吗?