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()(这样效率高)
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。