首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hibernate的工作原理

hibernate的工作原理

作者头像
qubianzhong
发布2018-08-10 16:51:35
3530
发布2018-08-10 16:51:35
举报
文章被收录于专栏:行者常至行者常至
工作原理:
  • ①读取并解析配置文件。
  • ②读取并解析映射信息,创建SessionFactory。
  • ③打开Session
  • ④创建事务Transaction。
  • ⑤持久化操作。
  • ⑥提交事务。
  • ⑦关闭Session。
  • ⑧关闭SessionFactory。

概述:
  • Hibernate可以理解为是一个中间件,它负责把Java程序的SQL语句接收过来并发送到数据库,而数据库返回来的信息由Hibernate接收后直接生成一个对象传给Java。
  • 首先,必须有数据库文件,假设数据库里有一个employee员工表,SQL语句如下:
create table employee(id Number(10),name varchar2(20))
  • 其次,Hibernate有两个特有的文件,一个是以.cfg.xml结尾的文件,一个是以.hbm.xml结尾的文件。

详述:
1、关于cfg.xml文件:
  • cfg.xml文件的作用就是连接数据库。文件内部其实就是一个由user、password、url、driver组成的连接库的基本信息。文件的内容如下:
<Hibernate-configuration>
    <session-factory>
        <property name="connection.username">用户名</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:数据库名</property>
        <property name="connection.password">密码</property>
        <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="dialect">org.Hibernate.dialect.OracleDialect</property>
        <mapping resource="employee.hbm.xml"/>  
    </session-factory>
</Hibernate-configuration>
  • 简单分析一下这个文件:
    • ①包含的是程序里面的configuration实例信息。通过这个实例的方法configure,我们可以从mapping中得到对应的表的信息和类的信息。
    • ② < session-factory > 这个标签是程序中通过configure的方法BuildSessionFactory得到的一个SessionFactory对象,这个对象可以理解为一个statement。我们对数据库的所有操作都是通过它的一系列方法来实现。
    • ③property dialect 都是Hibernate的一些属性设置,我们可以设置很多Property,其中一些是必须的,一些是可选的。
2、关于hbm.xml文件
  • hbm.xml文件是对数据库中表的映射文件,可以由这个文件指出哪个类对应着哪个表,而且还指出哪个类中的属性对应着表中的哪个字段。文件内容如下:
<Hibernate-mapping>
    <class name="src.employee" table="employee">
        <id name="id" column="id">
            <generator class="increment"/>
        </id>
        <property name="name" column="name"/>
    </class>
</Hibernate-mapping>
  • 上面文件里面有一行语句
<generator class="increment"/>

可以实现id自动增加,也就是说,如果往数据库中插入一个name,那么id就自动加1。

  • 这个文件解释了< Hibernate-mapping >所包含的就是cfg.xml文件中说的mapping。Java类中配置得到的mapping就是从这个文件里面读取出来的。如:
<class name="src.employee" table="employee">

就是先指定了类对应的表。文件中的语句就是指定表中的字段与类中的属性的对应关系。

  • 下面再说说要实现功能所需的Java类,有两个:一个是employee类,一个是Test类。 employee类是一个简单的JavaBean。它是先和数据库字段对应,然后取值的。
package src;

public class Employee{
    private int id;
    private String name;

    public void setId(int id){
        this.id = id;
    }

    public int getId(){
        return id;
    }

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }
}

再看一下Test类:

package src;

import org.hibernate.*;
import org.hibernate.cfg.*;

public class Test{
    try{
        SessionFactory sessionfactory = new Configuration().configure().BuildSessionFactory();
        Session session = sessionfactory.opensession();
        Transaction transaction = session.beginTransaction();
        for(int i = 0;i<3;i++){
            Employee employee = new Employee();
            employee.setName("begin go "+i);
            session.save(employee);
        }
        transcation.commit();
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        session.close();
    }
}
对代码分析如下:
  • 1、语句
SessionFactory sessionfactory = new Configuration().configure().BuildSessionFactory();

得到configuration的实例。然后通过configure()读取mapping对应的hbm.xml文件的信息。

  • 2、通过BuildSessionFactory得到SessionFactory对象。
  • 3、通过opensession()建立连接。Session就是指一个Session被建立,这里等于是一个connection被建立好。
  • 4、通过Session对象开启事务(Transaction)相当于conn.setAutoCommit(false)先不递交,最后通过另外一个方法递交。
  • 5、循环语句把employee实例化。
  • 6、实例化后就可以用其中的方法,如setName方法等。
  • 7、每次都要用session来save一下,一个对象set之后要保存在session中。
  • 8、最后递交commit().
  • 之所以没有SQL语句,是因为Hibernate的特性,对数据库的操作就是对对象的操作,这就是OR-Mapping的本质。

使用Hibernate的原因:
  • 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
  • Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它在很大程度上简化了DAO层的编码工作。
  • Hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
  • Hibernate的性能非常好,因为它是一个轻量级框架,映射的灵活性很出色。它支持各种关系型数据库,从一对一到多对多的各种复杂关系。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年07月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工作原理:
  • 概述:
  • 详述:
    • 1、关于cfg.xml文件:
    • 2、关于hbm.xml文件
      • 对代码分析如下:
      • 使用Hibernate的原因:
      相关产品与服务
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档