所谓实体查询即OID查询,就是使用主键作为条件来查询一个实体。其中涉及的方法是Session对象get方法和load方法。
get方法:
/**
* 根据id查询一个实体
* @param entityType 指的是要查询的实体类字节码对象
* @param id 查询的条件,即主键的值。
* @return 返回的是实体类对象
*/
<T> T get(Class<T> entityType,Serializable id);
get方法的代码演示:
/**
* 需求: 使用get方法查询id为1的客户
*/
@Test
public void test1(){
Session s = HibernateUtil.getCurrentSession();
Transaction tx = s.beginTransaction();
Customer c = s.get(Customer.class, 1L);
System.out.println(c);
tx.commit();
}
load方法:
/**
* 根据id查询一个实体
* @param theClass 指的是要查询的实体类字节码
* @param id查询的条件,即主键的值。
* @return 返回的是实体类对象或者是实体类对象的代理对象
*/
<T> T load(Class<T> theClass, Serializable id);
load方法的具体演示:
/**
* 需求: 使用load方法查询id为1的客户
*/
@Test
public void test2(){
Session s = HibernateUtil.getCurrentSession();
Transaction tx = s.beginTransaction();
Customer c = s.load(Customer.class, 1L);
System.out.println(c.toString());
tx.commit();
}
区别
1、 查询的时机不一样
get方法任何时刻都是立即加载,只要调用get方法,就马上发起数据库查询。
load方法默认情况下是延迟加载,真正用到对象的非OID字段数据才发起查询。
load方法是可以通过配置的方式改为立即加载。
配置的方式
由于load方法是hibernate的方法所以只有XML的方式:
< class name = "Customer" table = "cst_customer" lazy="false" >
2、返回的结果不一样
get方法永远返回查询的实体类对象
load方法返回的是代理对象
立即加载:是不管用不用马上查询。
延迟加载:是等到真正用的时候才发起查询。