首页 > 代码库 > hibernate学习随记
hibernate学习随记
hibernate学习随记:
一:hibernate的核心类和接口
① Configuration 类
它的用处是:
- 读取hibernate.cfg.xml
- 管理对象关系映射文件 <mapping resource=””>
- 加载hibernate 的驱动,url ,用户..
- 管理hibernate配置信息
② hibernate.cfg.xml
③ 对象关系映射文件
④ SessionFactory (会话工厂)
- 可以缓存sql语句和数据(称为session级缓存)!!
- 是一个重量级的类,因此我们需要保证一个数据库,有一个SessionFactroy
二: 讨论一个通过SessionFactory 获取 Session的两个方法 openSession() 一个 getCurrentSession();
- openSession() 是获取一个新的session
- getCurrentSession () 获取和当前线程绑定的session,换言之,在同一个线程中,我们获取的session是同一session,这样可以利于事务控制
如果希望使用 getCurrentSession 需要配置 hibernate.cfg.xml中配置.
- 如何选择
原则:
①如果需要在同一线程中,保证使用同一个Session则,使用getCurrentSession()
②如果在一个线程中,需要使用不同的Session,则使用opentSession()
- 通过 getCurrentSession() 获取的session在事务提交后,会自动关闭,通过openSession()获取的session则必须手动关闭
- 如果是通过getCurrentSession() 获取 sesssion ,进行查询需要事务提交.
三: 如何确定你的session有没有及时关闭
windows cmd netstat –an [oracle 1521 mysql 3306 sql server 1433]
linux/unix netstat –anp top
⑤ session接口
它的主要功能和作用是:
- Session一个实例代表与数据库的一次操作(当然一次操作可以是crud组合)
- Session实例通过SessionFactory获取,用完需要关闭。
- Session是线程不同步的(不安全),因此要保证在同一线程中使用,可以用getCurrentSessiong()。
- Session可以看做是持久化管理器,它是与持久化操作相关的接口
//查询方法get vs load
get vs load
- 如果查询不到数据,get 会返回 null,但是不会报错, load 如果查询不到数据,则报错ObjectNotFoundException
- 使用get 去查询数据,(先到一级/二级)会立即向db发出查询请求(select ...), 如果你使用的是 load查询数据,(先到一级、二级))即使查询到对象,返回的是一个代理对象,如果后面没有使用查询结果,它不会真的向数据库发select ,当程序员使用查询结果的时候才真的发出select ,这个现象我们称为懒加载(lazy)
- 通过修改配置文件,我们可以取消懒加载
<class name="Employee" lazy="false" table="employee">
- 如何选择使用哪个: 如果你确定DB中有这个对象就用load(),不确定就用get()(这样效率高)
hibernate学习随记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。