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的接口方法及实习功能,你用过了吗?