3、JPA-API
作者:互联网
Persistence
Persistence 类用于获取 EntityManagerFactory 实例,该类包含一个名为 createEntityManagerFactory 的静态方法 。
createEntityManagerFactory 方法有两个重载。
// persistence.xml 的持久化单元名 String persistenceUnitName = "jpaname";
/** * 带有一个参数的方法:以 JPA 配置文件 persistence.xml 中的持久化单元名为参数 */ EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
// persistence.xml 的持久化单元名 String persistenceUnitName = "jpaname"; Map<String, Object> properites = new HashMap<String, Object>(10); properites.put("hibernate.show_sql", true);
/** * 带有两个参数的方法:后一个参数 Map类型,用于设置 JPA 的相关属性,这时将忽略其它地方设置的属性,Map 对象的属性名必须是 JPA 实现库提供商的名字空间约定的属性名 */ EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName, properites);
EntityManagerFactory
/** * EntityManagerFactory 接口主要用来创建 EntityManager 实例。 * createEntityManager():用于创建实体管理器对象实例。 * createEntityManager(Map map):用于创建实体管理器对象实例的重载方法,Map 参数用于提供 EntityManager 的属性 * isOpen():检查 EntityManagerFactory 是否处于打开状态。实体管理器工厂创建后一直处于打开状态,除非调用close()方法将其关闭 * close():关闭 EntityManagerFactory。EntityManagerFactory 关闭后将释放所有资源,isOpen()方法测试将返回 false,其它方法将不能调用,否则将导致IllegalStateException异常 */ // 创建 EntityManager. 类似于 Hibernate 的 SessionFactory EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityManager
在 JPA 规范中,EntityManager 是完成持久化操作的核心对象。
实体作为普通 Java 对象,只有在调用 EntityManager 将其持久化后才会变成持久化对象。
EntityManager 对象在一组实体类与底层数据源之间进行 O/R 映射的管理,它可以用来管理和更新 Entity Bean,根椐主键查找 Entity Bean,还可以通过JPQL语句查询实体。
EntityManager#find
package jpa.test; import com.jpa.entity.Customer; import org.junit.After; import org.junit.Before; import org.junit.Test; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class JPATest { private EntityManagerFactory entityManagerFactory; private EntityManager entityManager; private EntityTransaction transaction; @Before public void init(){ entityManagerFactory = Persistence.createEntityManagerFactory("jpaname"); entityManager = entityManagerFactory.createEntityManager(); transaction = entityManager.getTransaction(); transaction.begin(); } @After public void destroy(){ transaction.commit(); entityManager.close(); entityManagerFactory.close(); } // 类似于 hibernate 中 Session 的 get 方法. @Test public void testFind() { Customer customer = entityManager.find(Customer.class, 1); System.out.println("-------------------------------------"); System.out.println(customer); } }
EntityManager#getReference
// 类似于 hibernate 中 Session 的 load 方法 @Test public void testGetReference(){ Customer customer = entityManager.getReference(Customer.class, 1); System.out.println(customer.getClass().getName()); System.out.println("-------------------------------------"); System.out.println(customer); }
// 在使用之前关闭 EntityManager,会发生懒加载异常 @Test public void testGetReference(){ Customer customer = entityManager.getReference(Customer.class, 1); System.out.println(customer.getClass().getName()); System.out.println("-------------------------------------"); transaction.commit(); entityManager.close(); System.out.println(customer); }
实体类的几种状态:
新建状态:新创建的对象,尚未拥有持久性主键。
持久化状态:已经拥有持久性主键并和持久化建立了上下文环境。
游离状态:拥有持久化主键,但是没有与持久化建立上下文环境。
删除状态:拥有持久化主键,已经和持久化建立上下文环境,但是从数据库中删除。
EntityManager#persistence
// 类似于 hibernate 的 save 方法. 使对象由临时状态变为持久化状态 // 和 hibernate 的 save 方法的不同之处: 若对象有 id, 则不能执行 insert 操作, 会抛出异常 @Test public void testPersistence(){ Customer customer = new Customer(); customer.setAge(15); customer.setBirth(new Date()); customer.setCreatedTime(new Date()); customer.setEmail("bb@163.com"); customer.setLastName("BB"); //customer.setId(100); entityManager.persist(customer); System.out.println(customer.getId()); }
EntityManager#remove
// 类似于 hibernate 中 Session 的 delete 方法,把对象对应的记录从数据库中移除 // 该方法只能移除 持久化 对象,而 hibernate 的 delete 方法实际上还可以移除 游离对象
@Test public void testRemove(){ // Customer customer = new Customer(); // customer.setId(2); Customer customer = entityManager.find(Customer.class, 2); entityManager.remove(customer); }
标签:customer,Customer,EntityManager,持久,JPA,entityManager,API,EntityManagerFactory 来源: https://www.cnblogs.com/jhxxb/p/10348702.html