`
kidiaoer
  • 浏览: 807863 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Hibernate总结

阅读更多
一、       基础知识

①    Hibernate是对象/关系映射(Object/Relation Mapping)的解决方案。  

②    Hibernate架构

●    POJO类

●    hibernate.cfg.xml

●    *.hbm.xml

●     Hibernate应用



二、 几个重要的类

●    Configuration类  (负责管理Hibernate的配置信息)

当创建SessionFactory时,Configuration实例可以指定使用哪一个映射文挡。应用程序通常只是创建一个Configuration实例,并通过它创建一个SessionFactory实例。

●    SessionFactory类 (负责创建Session实例)

它是线程安全的,可以被多线程调用以取得Session,而且构造SessionFactory很消耗资源,所以多数情况下一个应用中只初始化一个SessionFactory,为不同的线程提供Session。

● Session类

Session是Hibernate运作的中心,对象的生命周期、事务的管理、数据库的存取都与Session息息相关。Session不是线程安全的,多个执行线程共享一个Session,将会发生数据共享而发生混乱问题。为了解决此问题,可以采用ThreadLocal变量,使用它可以有效隔离执行所使用的数据,也就避开了Session的多线程之间的数据共享问题。



如何调用hibernate API?

1、创建Configuration对象。(解析配置文件)

  Configuration config = new Configuration();

 

2、通过Configuration创建Session Factory(线程安全的重量级组件)。

  Config = config.configure();   //configure()方法会在CLASSPATH下寻找hibernate.cfg.xml

  SessionFactory = config.buildSessionFactory();



3、通过SessionFactory创建Session会话对象。

  Session session = sessionFactory.openSession();



4、通过Session取得事务对象。

  Transaction trans = session.beginTransaction();



5、通过session与数据库进行会话。

  session.save(object o);         //增

  session.delete(object o);        //删

  session.update(object o);       //改

  session.get (Class clazz, Serializable id);  //根据Id查找对象

  session.createQuery(String sql);        //自己拼HQL语言查找对象返回一个Query对象。



6、提交操作,结束事务。

  Trans.commit();



7、关闭Session

  session.close();

  注:第一步和第二步一般放在静态初始化代码块中执行。



三、Hibernate中自带ID的generator的含义:

1、identity:用于MySql数据库。特点:递增

  <id name="id" column="id">

     <generator class="identity"/>

  </id>

  注:对于MySql数据库使用递增序列时需要在建表时对主键指定为auto_increment属性。



2、sequence:用于Oracle数据库

  <id name="id" column="id">

    <generator class="sequence">

      <param name="sequence">序列名</param>

    </generator>

  </id>



3、native:跨数据库时使用,由底层方言产生。

  Default.sequence为hibernate_sequence

  <id name="id" column="id">

    <generator class="native"/>

  </id>

  注:使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。

  如果Oracle中没有该序列,连Oracle数据库时会报错。



4、hilo:通过高低位合成id,先建表hi_value,再建列next_value。必须要    

       有初始值。

  <id name="id" column="id">

     <generator class="hilo">

       <param name="table">high_val</param>

       <param name="column">nextval</param>

       <param name="max_lo">5</param>

     </generator>

  </id>



5、sequencehilo:同过高低位合成id,建一个sequence序列,不用建表。

<id name="id" column="id">

<generator class="hilo">

<param name="sequence">high_val_seq</param>

<param name="max_lo">5</param>

</generator>

</id>

6、assigned:用户自定义id;

<id name="id" column="id">

<generator class="assigned"/>

</id>



7、foreign:用于一对一关系共享主健时,两id值一样。



四、Hibernate类关系的处理:

1、One―to―One关系在数据库中如何体现,在JavaBean中如何体现,在Hibernate中如何映射one-to-one关系。          

1、数据库中:一个表的外健对应另一个表的主健,外健要加上Unique约束。或者是两个表共享一个主健。

2、javaBean中:在JavaBean中增加一个属性,即另外一个对象的引用,可以单向也可以双向。

3、在hibernate中:

主健映射:都是one-to-one要用foreign生成策略。

外健映射:主表中用one-to-one,副表通过property-ref  many-to-one
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics