hibernate的核心类和核心配置_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > hibernate的核心类和核心配置

hibernate的核心类和核心配置

 2014/10/14 3:17:42  operating...mydream  程序员俱乐部  我要评论(0)
  • 摘要:hibernate的核心类和配置Configuration类加载核心配置文件hibernate.cfg.xml管理关系配置SessionFactory接口可以缓存sql和数据(session级缓存)重要级的类,一个数据库对应一个SessionFactory获取session(可以通过openSession()和getCurrentSession()方法获取)openSession()与getCurrentSession(
  • 标签:配置 hibernate

?

???????hibernate的核心类和配置

?

  • Configuration

?

  1. 加载核心配置文件hibernate.cfg.xml

  2. 管理关系配置

?

  1. 可以缓存sql和数据(session级缓存)

  2. 重要级的类,一个数据库对应一个SessionFactory

  3. 获取session(可以通过openSession()getCurrentSession()方法获取)

??? openSession()getCurrentSession()区别

?

  1. openSession开启一个新的session

  2. getCurrentSession是获取和当前线程绑定的一个session,换言之,在同一个线程中,获取的线程是同一个sessionhashcode值是一样的,这样有利于事务的控制,在核心文件hibernate.cfg.xml中配置,配置如下

    <property name="current_session_context_class">thread</property>

  3. 选择使用原则

?

  1. 如果在同一个线程中,保证使用一个session,则使用getCurrentSession

  2. 如果在同一个线程中,保证使用不同的session,则使用openSession

?

  1. 通过getCurrentSession获取的session在事务提交后,会自动关闭(不要再去手动关闭,否则会报session已关闭异常);通过openSession获取的session则需要手动去关闭

  2. 如果通过getCurrentSession获取的session查询操作,则需要事务提交

?

??????????? 本地事务:针对一个数据库的事务

?

??????????? 全局事务(jta):跨数据库的事务(例如转账,工行到建行,有两个数据库)

  • Session接口

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

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

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

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

?

?

  1. get()load()方法区别

?

  1. get()查询直接返回实体类,如果查不到数据则返回nullload()如果没有返回实体类,就会抛出org.hibernate.ObjectNotFoundException

  2. 使用get()先到缓存(session缓存/二级缓存)查询数据,如果没有数据,立即向数据库发送select请求;使用load()先到缓存(session缓存/二级缓存)查询数据,返回的是一个代理对象,如果没有真实使用到对象,就没有真正向数据库发送select请求,这是懒加载机制(lazy

  3. 可以通过关系配置文件修改懒加载:

    <class name="com.bobo.domain.User" lazy="false" table="user">

  4. 如何选择使用get()或者load()

    如果确定数据库有具体某条数据,使用load();如果不确定,则使用get()(这样使用效率高)

  • Transaction类,事务类

?

  1. 事务开始beginTransaction,提交submit,回滚rollback等方法

  2. 必须有事务提交,才可以更新数据到数据库

?

?

  • 核心配置文件hibernate.cfg.xml

?

  1. 配置对应的数据库信息:数据库连接,用户名,密码,方言等

  2. 加载数据库驱动

  3. 指定加载映射关系配置文件

?

?

??? 文件命名规则:一般是类名.hbm.xml

?

  1. 表名和字段名都要对应上类名和属性名

  2. 主键的生成策略

?

发表评论
用户名: 匿名