Hibernate 懒加载

本文介绍了Hibernate中的懒加载技术,包括类、集合及多对一关联的懒加载方式,探讨了如何通过懒加载减少SQL语句的发送次数,从而达到性能优化的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    性能指标:发出的sql语句越少,性能越高。
    提高性能方法:
        1、懒加载
        2、抓取策略
        3、缓存策略
        4、HQL语句


    1、懒加载类型:懒加载就是只加载需要的内容,不需要的不加载。
        1.1 类的懒加载
        1.2 集合的懒加载
        1.3 单端关联的懒加载(多对一)

    2、建工程 hibernate_optimize
        导包
        数据库沿用 Classes 和 Person表
        

    3、建 cn.google.hibernate.test.LazyTest
		public  class  LazyTest  extends  HibernateUtils{
			/**类的懒加载
			 *	1、利用session.load() 可以产生代理对象
			 *	2、在 session.load() 执行时,并不发出sql 语句
			 *	3、在得到其一般属性时发出 sql 语句
			 *	4、只针对一般属性有效,标示符属性无效
			 *	5、默认情况就是懒加载
			 */
			@Test
			public  void  testLoad(){
				Session  session = sessionFactory.openSession();
				Classes  classes = (Classes)session.load(Classes.class, 1L);
				s.o.p(classes);
				classes.getCid();
				session.close();
			}



			/**集合的懒加载
			 *	先在数据库中加点数据
			 *	sql 语句是在遍历时发出
			 *	设置 <set  name=""  cascade=""  lazy='false'>时,在 session.load() 时,集合就被加载
			 *	设置 <set  name=""  cascade=""  lazy='true'> 时,在遍历集合时加载
			 *	设置 <set  name=""  cascade=""  lazy='extra'>时,在遍历集合时加载,针对集合做 count,min,max,sum等操作
			 */
			@Test
			public  void  testSet(){
				Session  session = sessionFactory.openSession();
				Classes  classes = (Classes)session.load(Classes.class, 1L);
				Set<Student>  students  = classes.getStudents();
				for(Student  student: students){		// lazy='true'时,此时才发出 sql 语句
					s.o.p(student.getSname());
				}
				session.close();
			}



			/**单端关联的懒加载(多对一)
			 *	<many-to-one  lazy="false/no-proxy/proxy">	no-proxy 是默认值,相当于 true
			 *	根据"多"的一端,加载"一"的一端,就一个数据,所以无所谓 
			 */
			@Test
			public  void  testSet(){
				Session  session = sessionFactory.openSession();
				Classes  classes = (Classes)session.load(Classes.class, 1L);
				Set<Student>  students  = classes.getStudents();
				for(Student  student: students){		//  lazy="no-proxy" 此时才发出 sql 语句
					s.o.p(student.getSname());
				}
				session.close();
			}
		}
		

    总结:懒加载就是控制什么时候发出 sql 语句加载数据。针对“类”“集合”“many-to-one”。
        结合“抓取策略”一起使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值