Hibernate框架简介

what
      Hibernate是一个开源的,实现对象关系映射ORM思想的,轻量级的持久化框架
       ORM:(Object Relational Mapping的缩写)对象关系映射,即将实体的变化翻译成sql脚本,并执行到数据库中去, 即实体的变化映射到表的变化。这样我们在操作具体的实体对象时,就不需要再去和复杂的SQL语句打交道,只需操作实体对象的属性和方法就行了。
   轻量级框架:它没有侵入性,即不依赖任何容器(Servlet的启动必须依赖Tomacat容器),这样就启动时间较短,易于通用。是相对重量级框架而言的,重量级框架的概念就恰恰和它相反了
       持久化框架:持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗讲就是:如果关闭你的应用或系统然后重启先前的数据依然存在。(就拿实体和数据库表的变化,当你添加一个实体对象时,但还没添加到数据库,这时如果你关闭程序,这个实体对象数据就会丢失;但是当你保存到数据库后,再关闭程序,数据也不会丢失,因为它永久性的保存在了数据库里,即瞬时数据持久化为持久数据;应用了POJO持久化对象,应用层抽象出业务的POJO对象并通过Hibernate及映射文件的定义来实现其业务对象的持久化管理),持久化框架就是实现数据持久化的一种框架。实现持久化的方式有很多,比如写文件,写数据库


where
      一般应用在企业中,以为在企业中数据(各种订单数据,库存数据,客户数据)比应用程序本身更重要,这时就需要将数据持久化


why
      Hibernate对JDBC访问数据库的代码进行了轻量级封装,很大程度的简化了DAO层复杂sql语句的编写
优点

  • 提高生产力 (启动不依赖任何容器)
  • 使开发更加对象化【阻抗不匹配】 (操作面向实体对象,不再去直接操作数据库;对象—关系阻抗不匹配是指对象模型当中特有的“继承”,“组合”,“聚合”,“依赖”的概念在关系模型当中是不存在的,但是这种模型的“阻抗不匹配”最终在存储模型是还是能够统一起来的;实体对象中字段的数据类型可自动转换为数据库中的数据类型)
  • 可移植性 (很容易更改数据库,只需改一下配置文件)
  • 没有侵入行,支持透明持久化 (透明指具体怎么去操作数据库的我们不知道)

缺点

  • 使用数据库特性的语句,将很难调优
  • 对大批量数据更新存在问题
  • 系统中存在大量的统计查询功能

how
      创建一个Hibernate简单项目的步骤,主要步骤如下:

1
  1. 创建java项目
  2. 引入依赖包,可以创建User Library引入
          1>lib/*.jar
          2>hibernate3.jar
          3>加载数据库驱动(MySql驱动)
  3. 提供hibernate.cfg.xml配置文件,完成基本的配置
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory >
        <property name="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</property>    
        <property name="hibernate.connection.url" >jdbc:mysql://localhost:3306/hibernate_many2many</property>
        <property name="hibernate.connection.username" >数据库名称</property>
        <property name="hibernate.connection.password" >数据库密码</property>
        <property name="hibernate.dialect" >org.hibernate.dialect.MySQLDialect</property>
        <!--显示生成的sql语句-->
        <property name="hibernate.show_sql">true</property>
        <!--生的sql语句的格式-->
        <property name="hibernate.format_sql" >true</property> 

        <mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

      我们这使用的是MySql数据库,我们可以去根据etc下的hibernate.properties文件编写,在其文件中找到有关MySql的配置
4. 建立实体类User.java
5. 提供User.hbm.xml映射文件,完成实体类的映射

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >

    <class name="com.bjpowernode.hibernate.User" table="t_user">
        <!-- 设置主键 -->
        <id name="id">
            <!-- 设置主键生成策略 -->
            <generator class="uuid"></generator>
        </id>       
        <!-- 普通字段 -->
        <property name="name" />
        <property name="password" />
    </class>

</hibernate-mapping>

      常用的主键生成策略有:identity,sequence,uuid,native,assigned,foreign
6. 将User.hbm.xml文件加入到hibernate.cfg.xml文件中,此时Hibernate已知道映射的存在了
7.通过Hibernate API编写访问数据库的代码,即 编写工具类(如ExportDB.java)将hbm生成ddl。也就是hbm2ddl

package com.bjpowernode.hibernate;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class ExportDB {
    public static void main(String[] args) {
        //默认读取hibernate.cfg.xml文件
        Configuration cfg = new Configuration().configure();

        SchemaExport export = new SchemaExport(cfg);
        export.create(true, true);
    }
}

      即根据实体生成数据库表
8. 建立客户端类Client,添加用户数据到MySql

猜你喜欢

转载自blog.csdn.net/wrs120/article/details/79442333
今日推荐