hibernate加载策略

先来说说主键生成策略 有下面几种:
        1、程序员自己控制主键的生成    assigned
        2、数据库控制    identify、sequence
        3、hibernate进行控制    increment、uuid/uuid.hex
        4、跨数据库的    native=identify+sequence
        5、自定义    实现接口完成

1. 对象的三种状态(hibernate管理的对象)
  1.1 临时状态
  1.2 持久状态
  1.3 游离状态

1、hibernate是通过管理对象来操作数据,这里对象指的是持久化对象。
  2、hibernate中的三种状态的对象是可以相互转换的,通常编码时只关注持久
  化对象。关注get、save、update方法所操作后的对象

//用get是持久态对象  持久态对象才能操作数据库
		User user2 = openSession.get(User.class, 3);//查询单个的名字
		//关闭后就变成游离对象
		openSession.close();
		openSession=sessions.openSession();
		//当前是游离对象
		user2.setRealname("哈哈哈");
		openSession.update(user2);
		//更新后持久对象
		user2.setRealname("哈哈哈1");
		openSession.delete(user2);
		//临时对象
		user2.setRealname("哈哈哈2");
		openSession.save(user2);
		//添加之后变成持久态对象
		user2.setRealname("哈哈哈3");
		//System.out.println(user2.getRsername());输出名字

2.一级缓存:

**
     * 一级缓存:
     * 又被称为session级别的缓存
     * session.get执行的时候 将查询出来的对象形成快照保存到内存
     * openSession.update(user2);
     * 就是将user实例对象跟jvm中的快照进行对比 当不一致的时候会进行更新
     * @param args
     */

3. 加载策略
  3.1 立即加载
  3.2 延迟加载  代理对象
          LazyInitializationException   
        单例模式
            饱汉模式
            饿汉模式/懒汉模式


	//根据id查询dao方法 get
	public Student get(Integer sid) {
		Session getsession = SessionFactoryUtil.getsession();
		Transaction beginTransaction = getsession.beginTransaction();
		Student student=getsession.get(Student.class,sid);
		beginTransaction.commit();
		getsession.close();
		return student;
	}
	
	//load
	public Student load(Integer sid) {
		Session getsession = SessionFactoryUtil.getsession();
		Transaction beginTransaction = getsession.beginTransaction();
		Student student=getsession.load(Student.class,sid);
		beginTransaction.commit();
		getsession.close();
		return student;
	}




测试里面:


	/**
	 * get和load方法的区别:
	 * get是立即加载 获取的是具体的类对象
	 * load是懒加载 获取到的是hibernate根据实体类创建的代理对象 是用来保存实体类对象的oid
	 * oid是hibernate用来标识实体类的唯一性
	 * get是查询好放到内存里面可拿到
	 * load是用就给你查询 不要用就存一个id
	 */
	@Test
	public void testGet() {
	   Student student=studentdao.get(1);
	   System.out.println(student.getSid());//id
	   System.out.println(student.getSname());//名字
	   System.out.println(student.getClass().getName());//类名
	}
	
	@Test
	public void testLoad() {
		Student student=studentdao.load(1);
		 System.out.println(student.getSid());//id 这个只能获取到id
		   System.out.println(student.getSname());//名字
		   System.out.println(student.getClass().getName());//类名
	}
	

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值