Hibernate基础核心解析(1)

来源:互联网 发布:httppost发送json 编辑:程序博客网 时间:2024/06/06 00:56

                             Hibernate基础核心解析(1)

 

基本过程:

   一个*.hbm.xml对应一个POJO类,用于保存从类到关系映射的信息,hibernate.cfg.xml信息会获取映射源,同时保存关于连接数据库所需的基本信息。Configuration接口产生一个对应的对象用于加载配置信息,configuration对象产生一个对应于数据库的SessionFactory对象,SessionFactory可产生多个Sesssion对象,每个Session对应一次对数据库的操作,Session对象通过产生Transaction来使操作具有原子性。

 

1、hibernate概述:

   Hibernate是一种常用的ORM(对象关系映射)框架,用于将POJO类对应到数据库,从而实现通过面向对象完成对数据库的操作。

 

2、*.hbm.xml文件(对象关系映射文件)

(1)一个hbm.xml文件将一个类对应到一个关系(数据库中的表)

(2)hbm.xml文件模板:

   <?xmlversion="1.0" encoding="UTF-8"?> 

<!DOCTYPE hibernate-mapping PUBLIC 

       '-//Hibernate/Hibernate Mapping DTD 3.0//EN' 

       'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'> 

 <hibernate-mapping package=”com.firsthibernate”>

     <class name=”user”  table=”user”>                          o

        <id name=”the_id”  colum=”id”type=”java.lang.Interger”>r

            <generator class=”uuid”>

        </id>

        <property name=”user_name” type=”java.lang.String”>

            <column name=”the_user_name” not-null=”false”>

        </property>

    </class>

  </hibernate-mapping>

Hbm.xml的根标签为<hibernate-mapping></hibernate-mapping>其中的package可以省略,则后面的类名必须为全称限定类名。次级的标签为类和其所对应的表明(省略默认相同);再次级为id(主键)和property(属性),主键内必须说明generator;两者的类型对应的属性名皆可以省略,not-null默认为ture.

 

 

3、*.cfg.xml(hibernate配置文件)

 (1)hibernate配置文件用于配置连接数据库的所有信息包括:JDBC类型,数据库的URL,用户名,密码,方言,以及基本设置。同时还要有映射文件源信息<mapping resource=”****”>.

  (2)模板:

      <?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE hibernate-configurationPUBLIC 

         "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 

         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration>cla

<!—对数据库的连接信息进行设置—>

<session-factory>

   <! – 使用的JDBC -->

   <property name=” hibernate.connection.driver_class”>

com.mysql.jdbc.driver

</property>

   <! – 数据库的URL路径 –>

<propertyname=” hibernate.connection.url”>

jdbc:mysql://localhost:3306/hibernate_first

</property>

<!—用户名 -->

<property name=” hibernate.connection.username”>

Root

</property>

<!—密码—>

<property name=” hibernate.connection.password”>

 Root

</property>

<!—方言 -->

<property name=” hibernate.dialect”>

org.hibernate.dialect.MySQLDialect

</property>

<!-- 显示出对应sql语句 --> 

   <propertyname="show_sql">true</property> 

   <!-- 格式化输出sql语句 --> 

   <propertyname="format_sql">true</property>

<!-- 指定管理对象映射文件 --> 

   <mappingresource="com/lc/domain/Employee.hbm.xml"></mapping

 </session-factory>

</hibernate-configuration>

 

 

3、configuration类

(1)用于读取cfg.xml文件,并获得配置的所有信息,同时根据配置信息生成对应的SessioFactory对象。

(2)代码示意:

  Configurationcfg= new Configuration().configure();

//加载配置信息,生成对应的configuration对象

SessionFactory sf=cfg.buildSessionFactory();

 

4、SessionFactory接口

(1)由Configuration对象产生,一个数据库对应一个SessionFactory对象,通过创建session来完成对数据库的操作。E

(2)代码示意:

  Session session1=sf.openSession();

 Session session1=sf.getCurrentSession();

//创建一次会话

区别:

①采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会

②采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()创建的session必须手动关闭.

③使用getCurrentSession()需要在hibernate.cfg.xml文件中加入

如下配置:

* 如果使用的是本地事务(jdbc事务)

<propertyname="hibernate.current_session_context_class">thread</property>

* 如果使用的是全局事务(jta事务)

<propertyname="hibernate.current_session_context_class">jta</property>

 

5、Session接口

(1)由SessionFactory对象产生,一次会话对应一个Session对象,可以创建Transaction对象,使操作具有原子性。

(2)代码示意:

  Session1.sava(user)

//对表进行操作后进行保存,其中user对象为POJO类的实例。

 Session1.close();

//关闭会话,如果为getCurrentSession创建的会话可以省略。

 Session1.beginTransaction();

//开始事务,以下的操作具有原子性,直至commit结束;

Session1.getTranscation.

//获得当前的事务。

 

6、Transaction接口

(1)由Seeeion对象产生,使操作具有原子性。

(2)Session1.getTransaction.commit();

//提交事务

Session1.getTransaction.rollback();

//事务滚回