EntityManager中find和getReference方法的区别
-
find:根据id查询数据
* class: 查询数据的结果需包装实体类类型的字节码
* id: 查询的主键的取值
*
* 使用find查询:
* 1. 查询的对象就是当前客户对象本身
* 2. 在调用find方法的时候,就会发送sql语句查询数据库
*
* 立即加载 -
getReference:根据id查询数据
* class: 查询数据的结果需包装实体类类型的字节码
* id: 查询的主键的取值
/**
* 根据id查询用户 em.find()
*/
@Test
public void testFind(){
// 1.根据工具类获取 EntityManager对象
EntityManager em = JpaUtils.getEntityManager();
// 2.开启事务
//EntityTransaction tx = em.getTransaction();
// 3.增删改查
/**
* find:根据id查询数据
* class: 查询数据的结果需包装实体类类型的字节码
* id: 查询的主键的取值
*
* 使用find查询:
* 1. 查询的对象就是当前客户对象本身
* 2. 在调用find方法的时候,就会发送sql语句查询数据库
*
* 立即加载
*
*/
Customer customer = em.find(Customer.class,1l);
System.out.println(customer);
// 4. 提交事务
//tx.commit();
// 5. 释放资源
em.close();
//factory.close();
}
/**
* 根据id查询用户 em.getReference()
*
* 使用getReference():
* 1. 获取的对象是动态代理对象
* 2. 调用getReference()方法不会立即发送sql语句查询数据库
* * 当调用查询结果对象的时候,才会发送查询sql语句:什么时候用,什么时候发送sql查询数据库
*
* 延迟加载(懒加载) #通常使用
* * 得到的是一个动态代理对象
* * 什么时候用,什么时候才会加载
*/
@Test
public void testReference(){
// 1.根据工具类获取 EntityManager对象
EntityManager em = JpaUtils.getEntityManager();
// 2.开启事务
//EntityTransaction tx = em.getTransaction();
// 3.增删改查
/**
* getReference:根据id查询数据
* class: 查询数据的结果需包装实体类类型的字节码
* id: 查询的主键的取值
*/
Customer customer = em.getReference(Customer.class,1l);
System.out.println(customer);
// 4. 提交事务
//tx.commit();
// 5. 释放资源
em.close();
//factory.close();
}