hibernate学习笔记(三)
来源:互联网 发布:德罗赞最近几场数据 编辑:程序博客网 时间:2024/06/01 10:01
session(回话)接口
1.Session一个实例代表与数据库的一次操作(当然一次操作可以是crud组合)
2.Session实例通过SessionFactory获取,用完需要关闭。
3.Session是线程不同步的(不安全),因此要保证在同一线程中使用,可以用getCurrentSessiong()。
4.Session可以看做是持久化管理器,它是与持久化操作相关的接口
代码举例(前边我们也是用过了):
Configuration cf=new Configuration().configure(); SessionFactory sf=cf.buildSessionFactory(); Session s=sf.getCurrentSession(); //或者是: Session s=sf.openSession();
Session一般以对象的形式来操作,主要是CRUD(save delete update load/get)
注意前几个都没什么问题,现在就是查询的时候的两种方式load和get的区别是什么呢
1.get()方法直接返回实体类,如果查不到数据则返回null。load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象), 但当代理对象被调用时,如果没有数据不存在,就会抛出org.hibernate.ObjectNotFoundException异常
2.load先到缓存(session缓存/二级缓存)中去查,如果没有则返回一个代理对象(不马上到DB中去找),等后面使用这个代理对象操作的时候,才到DB中查询,这就是我们常说的 load在默认情况下支持延迟加载(lazy)
但是get先到缓存(session缓存/二级缓存)中去查,如果没有就到DB中去查(即马上发出sql)
因此,如果确定DB中有这个对象就用load(),不确定就用get(),这样的话效率是最高的
<class name="Employee" lazy="false" table="employee">我们可以通过这行代码取消懒加载,这样懒加载就会被禁用,系统默认是true
这样我们有看出了hibernate的好处,通过session缓存和二级缓存大大减少了对数据库的平凡访问,提高了效率,这也是hibernate的好处之一
我们现在写一个session的工具类,似的它可以直接返回全新的session和线程相关的session(之前写的MySessionFactory只能生成全新的session),代码如下:
package com.cyj.util;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;final public class HibernateUtil { //SqlHelper private static SessionFactory sessionFactory=null;//使用线程局部模式private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();private HibernateUtil(){};static {sessionFactory=new Configuration().configure().buildSessionFactory();}//获取全新的全新的sesessionpublic static Session openSession(){return sessionFactory.openSession();}//获取和线程关联的sessionpublic static Session getCurrentSession(){Session session=threadLocal.get();//判断是否得到if(session==null){session=sessionFactory.openSession();//把session对象设置到 threadLocal,相当于该session已经和线程绑定threadLocal.set(session);}return session;}
- Hibernate学习笔记(三)
- Hibernate学习笔记(三)
- hibernate学习笔记(三)
- Hibernate学习笔记(三)
- Hibernate学习笔记(三)
- Hibernate学习笔记(三)
- hibernate学习笔记(三)
- hibernate学习笔记(三)
- hibernate学习笔记三
- hibernate学习笔记三
- Hibernate学习笔记三
- hibernate学习笔记(三)
- Hibernate学习笔记三
- Hibernate学习笔记(三)
- hibernate学习笔记三
- Hibernate学习笔记(三)【配置详解】
- Hibernate学习笔记(三)Session
- Hibernate学习笔记(三)【配置详解】
- linux rtp 编程JRTLIB
- eval函数
- Java list foreach 修改元素
- windows下java使用Sigar的配置
- 图论-1讲课总结
- hibernate学习笔记(三)
- Java之类之间的继承关系
- [Oracle 10g会有的一个错误]ORA-00988: 口令缺失或无效
- 使用栈实现进制转换(java大数进制转换)
- JavaScript 动态加载脚本和样式
- Spring依赖注入
- Shell脚本需要注意的问题汇总
- 安卓 图片大小不变的情况下裁剪图片
- Java synchronized 同步原语 详解