hibernate理解

hibernate是对jdbc轻量级封装的反射为基础的orm(object relation mapping 对象关系映射)框架,充当项目的持久层。

保存数据 save,update  查询load (xx.class ,id) ,get()(区别下面会讲到) 删除delete

,所操作的类必须有序列。序列式文件传送的标识。

pojo类1是和一张表对应的,2一般我们放在com.xxx.model(domain)里

3pojo需要一个主键属性(用于标示一个pojo对象)4除了主键属性外,它应当还有其属性是private

5提供set/get方法 6他应当有一个无参的构造方法,用于hibernate反射

通过SessionFatory获取Session的2个方法openSession、getCurrentSession();

  openSession每次获得全新的Session

  getCurrentSession获取和当前线程绑定的Session,利于事务的控制。(如果希望使用getCurrentSession需要配置hibernate.cfg.xml里配置<property                         name="current_session_context.class">thread</property>)

  如何选择

  getCurrentSession()会自动关闭 openSession要自动关闭 但我们最好都手动关闭

  getCurrentsession获取的Session进行的查询需要事务提交

Session接口的功能

  1.Session一个实例代表与数据库的一次操作(一次操作可以crud组合)

  2.Session实例通过SessionFactory获取,用完需要关闭

  3.Session是线程不同步的(不安全),因此要保证在同一线程中使用,可以用getCurrentSession()

  4Session可以看做做持久化管理器,他是与持久化操作相关的接口

get和load区别

  1.如果查询不到数据,get返回null ,load会报错  objectNotFundException

  2.使用get去查询数据,会立即向db发出查询请求select,  load 查询数据查到的是代理对象,如果后面没有使用查询结果,它不会真的向数据库发Select,当程序员使用查询结果的时候才真的发出Select,即懒加载(通过配置文件可以取消懒加载(class name="xxx"lazy="false" table="Xxx")) 确定有某个对象最后用懒加载.get先在Session里找,然后2级缓存 ,在Db   , load会先到Session里找,然后到二级缓存里找,如果找到就放到一级缓存,然后等待

 

  

posted @ 2013-04-24 20:13  你的就是你的  阅读(423)  评论(0编辑  收藏  举报