package com.hbsi.test;
import org.hibernate.Session;
import org.junit.Test;
import com.hbsi.domain.User;
import com.hbsi.utils.HibernateUtil;
publicclass TestLazy {
//测试get()方法;get()方法不管你有没有用到,总会执行sql语句
@Test
publicvoid testGet(){
Session session = HibernateUtil.getSession();
User user = (User) session.get(User.class,1);
// System.out.println(user.getName());
HibernateUtil.close();
//这里要注意的是:即使关闭了session,使user处于托管状态,仍然可以可以使用user对象;这是因为虽然处于托管状态,但是这个对象是存在属性值的对象,并没有把他删除,只是隔绝了它与数据库的打交道的通道。
System.out.println(user.getName());
}
//测试load()方法;不执行sql语句,用到的时候才执行
@Test
publicvoid testLoad(){
Session session = HibernateUtil.getSession();
User user = (User) session.load(User.class,1);
//这里输出id也不会执行sql语句,直接从上面你传进去的id中获取id,没有从数据库中查找,所以也不执行sql语句
System.out.println(user.getId());
//而输出name就不一样了,这时其实就是实例化了代理对象,这是的代理对象有了name的属性,这时即使你关闭了session,也可以通过这个对象获取到name;如果注释这句,即不实例化代理对象,又在关闭session后执行输出name属性,这时会报错:could not initialize proxy
// System.out.println(user.getName());
HibernateUtil.close();
System.out.println(user.getName());
}
}
@Test
publicvoid find(){
Session session = HibernateUtil.getSession();
Customer cus = (Customer) session.get(Customer.class,3);
System.out.println(cus.getCname());
//用到下面这种方法输出会出现两天sql语句,而且是分开的;如果用到懒加载会出现先输出两条sql语句,在输出结果
//这里不能直接方法链式输出cus.getOrd().getOname();因为cus.getOrd()返回的是一个set集合
Set<Orders> orders = cus.getOrd();
System.err.println(orders.size());
HibernateUtil.close();
}
@Test
publicvoid find(){
//默认使用懒加载,即用着一条sql语句就输出一条;如果设置延时加载为false后输出两条sql语句,将不需要的顾客信息也查出来
Session session = HibernateUtil.getSession();
Orders ord = (Orders) session.get(Orders.class,3);
System.out.println(ord.getOname());
HibernateUtil.close();
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有