JPA(四):EntityManager接口

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

你可能感兴趣的:(JPA(四):EntityManager接口)