Java就业Hibernate高级:立即检索与延迟检索及代理机制.pptxVIP

  • 0
  • 0
  • 约2.37千字
  • 约 11页
  • 2026-02-27 发布于北京
  • 举报

Java就业Hibernate高级:立即检索与延迟检索及代理机制.pptx

北京传智播客教育hibernate(高级)讲师:赵君

北京传智播客教育hibernate的检索策略

北京传智播客教育hibernate的检索策略知识点1:区分立即检索和延迟检索查询编号为1的客户立即检索:立即加载检索方法指定的对象延迟检索:延迟加载检索方法指定的对象只针对session.load()方法,不针对get()方法

北京传智播客教育hibernate的检索策略知识点2:理解延迟检索中的代理publicvoidloadCustomertrueProxy(){Sessionsession=sessionFacoty.openSession();Transactiontx=session.beginTransaction();//此时查询到的c对象是一个代理对象Customerc=(Customer)session.load(Customer.class,1);System.out.println(c.getClass());//代理对象c.getClass();//hibernate不会执行select语句c.getId();//hibernate不会执行select语句c.getAge();//该行hibernate会执行select语句mit();session.close();}只有延迟检索会产生代理对象,立即检索不会产生代理对象Customer对象Customer对象代理对象Hibernate使用javassist-3.9.0.GA.jar包创建代理

北京传智播客教育hibernate的检索策略知识点3:区分类级别和关联级别的检索类级别的检索:Customerc=(Customer)session.load(Customer.class,1);session的方法直接检索Customer对象,对Customer对象到底采用立即检索还是延迟检索方式通过class元素的lazy属性设定关联级别的检索:Customerc=(Customer)session.load(Customer.class,1);Setset=c.getOrders()//检索Order对象的set集合在这个例子中session.load(Customer.class,1):查询的客户表c.getOrders():查询订单表查询订表表是否发生,以何种方式发生(立即检索、延迟检索),就是关联级别检索通过set元素lazy属性设定

北京传智播客教育hibernate的检索策略知识点4:类级别检索策略类级别可选的检索策略包括立即检索和延迟检索,默认为延迟检索类级别的检索策略可以通过class元素的lazy属性进行设置如果程序加载一个对象的目的是为了访问它的属性,可以采取立即检索.如果程序加载一个持久化对象的目的是仅仅为了获得它的引用,可以采用延迟检索

北京传智播客教育hibernate的检索策略无论class元素的lazy属性是true还是false,Session的get()方法及Query的list()方法在类级别总是使用立即检索策略若class元素的lazy属性为true或取默认值,Session的load()方法不会执行查询数据表的SELECT语句,仅返回代理类对象的实例,该代理类实例有如下特征:由Hibernate在运行时采用javassist工具动态生成Hibernate创建代理类实例时,仅初始化其OID属性在应用程序第一次访问代理类实例的非OID属性时,Hibernate会初始化代理类实例

北京传智播客教育hibernate的检索策略知识点5:关联级别的检索策略在映射文件中,用set元素来配置一对多关联及多对多关联关系.set元素有lazy属性lazy:主要决定orders集合被初始化的时机.即到底是在加载Customer对象时就被初始化,还是在程序访问orders集合时被初始化

北京传智播客教育hibernate的检索策略*****(理解)比较二种检索策略由应用程序决定需要加载哪些对象,可以避免执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并节省内存空间。对应用程序完全透明,应用程序都可以从一个对象导航到关联的对象优点(1)一对多或者多对多关联(2)应用程序不需要立即访问或者根本不会访问的对象(

文档评论(0)

1亿VIP精品文档

相关文档