1. 加载策略:在hibernate中,hibernate为了查询效率,提供了2中加载策略,一种即时加载,另一种延迟加载(懒加载)。
2.即时加载:查询数据时候,立即从数据库中将数据查询出来。
get方法获取数据就是采用的即时加载:
@Test public void testGet(){ Student stu = (Student)session.get(Student.class, 1); System.out.println("================"); System.out.println(stu.getName()+"---"+stu.getSex()); }
list方法采用的也是即时加载:
@Test public void testList(){ List<Student> list = session.createQuery("from Student").list(); System.out.println("============"); }
3. 延迟加载:在调用方法查询数据时,不会立即到数据库中查询数据,只有真正用到数据的时候才会到数据库查询。
@Test public void testLoad(){ Student stu = (Student)session.load(Student.class, 1); System.out.println("================"); System.out.println(stu.getId()+"---"); }
4. 懒加载:
class 默认时 lazy=true
Property默认是lazy=false的
Many-to-one:默认是
Lazy=false 即时加载
lazy=proxy懒加载
lazy=no-proxy懒加载 不使用代理
set: 默认
lazy=true 懒加载
lazy=extra 机智的加载方式,检查是否真正需要数据,如果仅仅是显示数据个数,那么不会加载数据,如果真正需要显示数据,那么加载数据
lazy=false即时加载
5.抓取策略:指hibernate采用何种方式从数据库获取数据,大的方面有两类 selete 和 join 。
select 抓取指 通过select语句来获取关联数据。
<many-to-one name="teacher" column="tid" fetch="select"/>
join抓取策略,指通过join来获取关联数据
<many-to-one name="teacher" column="tid" fetch="join"/>
注意:当采用join抓取数据时,懒加载不去作用。