JPA学习(三、JPA_API)
2021-03-30 11:27
标签:div 上下 自动 stat 数据库访问 cep jpa 调用 模式 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。 学习视频:尚硅谷框架jpa学习(有兴趣的同学留言邮箱) 使用软件:eclipse Java版本:jdk8 三、JPA_API 1.Persistence 2.EntityManagerFactory 3.entityManager 4.EntityTransaction 实体的状态: 1.新建状态:新创建的状态,尚未拥有持久性主键 2.持久化状态:已经拥有持久性主键并和持久化建立了上下文环境 3.游离状态:拥有持久化主键,但是没有与持久化建立上下文环境 4.删除状态:拥有持久化主键,已经和持久化建立上下文环境,但是从数据库中删除 JPA学习(三、JPA_API) 标签:div 上下 自动 stat 数据库访问 cep jpa 调用 模式 原文地址:https://www.cnblogs.com/xzmxddx/p/9280089.html框架学习之JPA(三)
本节目录
三、JPA_API
1.Persistence
2.EntityManagerFactory
3.entityManager
//类似于hibernate中session的get方法
@Test
public void testFind() {
Customer customer = entityManager.find(Customer.class, 1);
System.out.println("---------------------------");
System.out.println(customer.toString());
}
//类似于hibernate中session的load方法
@Test
public void testGetReference() {
Customer customer = entityManager.getReference(Customer.class, 1);
//这是一个代理对象,可能会出现懒加载异常,即在使用当前customer之前就把entityManager关闭,就无法进行数据库访问
System.out.println(customer.getClass().getName());
System.out.println("---------------------------");
System.out.println(customer.toString());
}
//类似于hibernate中的save方法,使对象由临时状态变为持久化状态
//和hibernate的save方法的不同之处:若对象有id,则不能执行insert操作,而会抛出异常
@Test
public void testPersistence() {
Customer customer = new Customer();
customer.setAge(12);
customer.setEmail("937724308@qq.com");
customer.setLastName("xiong");
customer.setBirth(new Date());
customer.setCreatedTime(new Date());
entityManager.persist(customer);
//可以打印Id
System.out.println(customer.getId());
}
//类似于hibernate的delete方法,把对象对应的记录从数据库中移除
//但注意:该方法只能移除持久化对象。二hibernate的delete方法实际上还可以移除游离对象
@Test
public void testRemove() {
Customer customer = entityManager.find(Customer.class, 2);
entityManager.remove(customer);
}
//若传入的是一个游离对象, 即传入的对象有 OID.
//1. 若在 EntityManager 缓存中有对应的对象
//2. JPA 会把游离对象的属性复制到查询到EntityManager 缓存中的对象中.
//3. EntityManager 缓存中的对象执行 UPDATE.
@Test
public void testMerge4(){
Customer customer = new Customer();
customer.setAge(18);
customer.setBirth(new Date());
customer.setCreatedTime(new Date());
customer.setEmail("dd@163.com");
customer.setLastName("DD");
customer.setId(4);
Customer customer2 = entityManager.find(Customer.class, 4);
entityManager.merge(customer);
System.out.println(customer == customer2); //false
}
//若传入的是一个游离对象, 即传入的对象有 OID.
//1. 若在 EntityManager 缓存中没有该对象
//2. 若在数据库中也有对应的记录
//3. JPA 会查询对应的记录, 然后返回该记录对一个的对象, 再然后会把游离对象的属性复制到查询到的对象中.
//4. 对查询到的对象执行 update 操作.
@Test
public void testMerge3(){
Customer customer = new Customer();
customer.setAge(18);
customer.setBirth(new Date());
customer.setCreatedTime(new Date());
customer.setEmail("ee@163.com");
customer.setLastName("EE");
customer.setId(4);
Customer customer2 = entityManager.merge(customer);
System.out.println(customer == customer2); //false
}
//若传入的是一个游离对象, 即传入的对象有 OID.
//1. 若在 EntityManager 缓存中没有该对象
//2. 若在数据库中也没有对应的记录
//3. JPA 会创建一个新的对象, 然后把当前游离对象的属性复制到新创建的对象中
//4. 对新创建的对象执行 insert 操作.
@Test
public void testMerge2(){
Customer customer = new Customer();
customer.setAge(18);
customer.setBirth(new Date());
customer.setCreatedTime(new Date());
customer.setEmail("dd@163.com");
customer.setLastName("DD");
customer.setId(100);
Customer customer2 = entityManager.merge(customer);
System.out.println("customer#id:" + customer.getId());
System.out.println("customer2#id:" + customer2.getId());
}
/**
* 总的来说: 类似于 hibernate Session 的 saveOrUpdate 方法.
*/
//1. 若传入的是一个临时对象
//会创建一个新的对象, 把临时对象的属性复制到新的对象中, 然后对新的对象执行持久化操作. 所以
//新的对象中有 id, 但以前的临时对象中没有 id.
@Test
public void testMerge1(){
Customer customer = new Customer();
customer.setAge(18);
customer.setBirth(new Date());
customer.setCreatedTime(new Date());
customer.setEmail("cc@163.com");
customer.setLastName("CC");
Customer customer2 = entityManager.merge(customer);
System.out.println("customer#id:" + customer.getId());
System.out.println("customer2#id:" + customer2.getId());
}
4.EntityTransaction
上一篇:最基本的API