Hibernate框架(一)——整體介紹

 做爲SSH三大框架之一的Hibernate,是用來把程序的Dao層和數據庫打交道用的,它封裝了JDBC的步驟,是咱們對數據庫的操做更加簡單,更加快捷。利用Hibernate框架咱們就能夠再也不編寫重複的JDBC代碼,再也不反覆的測試咱們的SQL語句寫的如何。這裏這須要咱們簡單配置,調用框架給咱們提供的方法,就能夠完成對數據增刪改查的,那麼Hibernate究竟是個什麼樣的框架呢?如何使用呢?先看一個關於Hibernate框架的知識體系圖: java


 

 

   這篇博客,咱們來總結一下,Hibernate宏觀的認識和,環境搭建。 mysql

   一,Hibernate究竟是什麼? sql

     Hibernate是一個基於元數據輕量級ORM框架: 數據庫

    1,元數Meta Data:data about data(數據的數據),也就是說描述一個對象數據,至關於這個對象的上下文環境。 編程

    2,輕量級:佔用資源少,沒有侵入性。(其實我認爲這只是相對而言,若是和Ibatis相比,它到成重量級的了)。 緩存

    3,ORM:(Object Relation Mapping對象關係數據庫的映射 session

    這是Hibernate框架的重點,也就是說將咱們程序中的實體(bean,這裏也叫POJO)和數據庫中的表進行映射。java類型和sql類型映射,面向對象設計和關係型數據庫設計的映射,從而咱們只須要將更多的精力放到業務中,而不是sql數據庫方面。 app

    4POJO:(Plain Ordinary Java Object,無格式的普通java對象,也就是上邊說的實體,和數據庫作映射的簡單類。只是在這裏提出了一個新的名詞而已。 框架

    總而言之,Hibernate就是將咱們的數據庫表和程序的POJO類進行映射,數據的操做進行了封裝,使咱們不用把數據庫弄得很是精通,咱們會面向對象編程就能夠了,這樣大大提升了咱們的編程效率,並且對我的的知識要求也下降了。(Hibernate的設計目的是這樣的,但是我覺的要想更好的應用Hibernate,更好的掌握開發的前因後果,這是要求咱們要有更高的能力了,知其然知其因此然了) dom

 

   二,環境搭建:

    1,和前邊幾個框架的大概流程同樣,首先須要咱們拷入必備的jar包。jar包的拷入奔着一個夠用便可的原則,用什麼拷貝什麼,固然有些日誌輸出,單元測試是爲了更好的觀察框架而拷入的不是必備的。這裏講到是用MySql來進行演示,因此使用了mysql的驅動jar包:

    antlr-2.7.6.jar (生成SQL語句)

    asm.jar(字節碼加強工具類)

    c3p0-0.9.1.jar(數據源鏈接池組件)

    cglib-2.1.3.jar(代理組件,基於繼承的)

    commons-collections-2.1.1.jar(集合工具類組件,會進行高效的操做)

    commons-logging-1.0.4.jar(日誌輸出的轉換組件)

    log4j-1.2.11.jar(日誌輸出組件,更加詳細和能夠控制輸出格式,及目的地)

    dom4j-1.6.1.jar(XML解析)

    ehcache-1.2.3.jar(緩存組件)

    ejb3-persistence.jar(持久化操做的規範jar包)

    hibernate3.jar(框架的核心jar包)

    jta.jar(全局的事務管理)

    junit-3.8.1.jar        (單元測試)                        

    mysql-connector-java-3.1.13-bin.jar        (MySQL數據庫驅動jar包)


    2,引入配置文件:

    hibernate.cfg.xml      Hibernate核心配置文件(包括數據庫的鏈接配置,映射文件的讀取等)

    log4j.properties      Log4j的日誌輸出控制文件

         User.hbm.xml  映射文件(這裏的User只是匹配User實體的,一個實體類對應一個此類的映射文件。)

  3,核心配置文件hibernate.cfg.xml的編寫:

<hibernate-configuration>  
    <!-- 構造數據庫的鏈接工廠,這是Hibernate的核心類 -->  
    <session-factory>  
      
        <!-- 這裏是簡單的數據庫鏈接的基本信息,也能夠寫在配置文件中,或者利用JNDI來調用數據源 -->  
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=utf8</property>  
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
        <property name="hibernate.connection.username">ljh</property>  
        <property name="hibernate.connection.password">ljh</property>  
          
        <!-- 在控制檯裏打印生成的SQL語句 -->  
        <property name="hibernate.show_sql">true</property>  
        <!-- 格式化控制檯輸出的SQL語句,這兩條都是方便咱們來學習Hibernate框架 -->  
        <property name="hibernate.format_sql">true</property>  
          
          
        <!--   
            方言:根據指定的方言與數據庫打交道,完成SQL的具備語句生成,由於不一樣的數據庫sql語法仍是有區別的,  
            這裏至關於告訴Hibernate框架,咱們使用的是什麼數據庫。  
                MySQL : org.hibernate.dialect.MySQLDialect  
                Oracle : org.hibernate.dialect.OracleDialect  
         -->  
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
          
        <!-- 管理全部的映射資源文件,這裏僅僅配置了User類的配置映射文件,應該將咱們的全部的映射配置文件設置到這裏,這樣咱們框架才能找到 -->  
        <mapping resource="com/ljh/hibernate/pojo/User.hbm.xml"/>  
          
    </session-factory>  
</hibernate-configuration>

 

  4,   *.hbm.xml與實體類對應的用來作映射的文件的編寫,我覺的這裏是重點,設計的知識點比較多。這裏簡單看一個,後邊會總結這裏邊的語法:

<hibernate-mapping>  
    <!-- 實體類class和數據庫表table的映射 -->  
    <class name="com.ljh.hibernate.pojo.User" table="t_user">  
  
        <!--   
            id標籤用來映射主鍵字段  
            name屬性表示類的屬性  
            column屬性表示表的字段  
         -->  
        <id name="usercode" column="usercode" length="20">  
            <!-- 主鍵生成策略   
                native 表示根據鏈接數據庫的表的主鍵生成方式來生成主鍵值  
                mysql數據採用的auto_increment屬性來生成主鍵值,通常主鍵字段須要設置的類型爲int    
                assigned 表示主鍵由用戶本身維護。     
            -->  
            <generator class="assigned"/>  
        </id>  
  
        <!-- 普通屬性的映射  
            name 表示類中的屬性名稱    
            column 表示表中的列名稱    column屬性不指定會採用默認的值,默認名稱與屬性名稱一致  
            length 表示屬性的字符長度  
            not-null 表示屬性值不能爲null  
         -->  
        <property name="userpswd" column="userpswd" type="java.lang.String" length="20" not-null="true"/>       
        <property name="username" />  
        <property name="regdate" length="19"/>  
        <property name="orgtype" length="1"/>  
    </class>  
 </hibernate-mapping>

 

  5,上邊已經作好了實體類和數據表的映射了,咱們能夠經過Hibernate框架提供的方法進行對數據庫的數據操做了,簡單看一個dao層類的實現:

public void insert(User user) {  
    //加載配置文件:classpath:hibernate.cfg.xml  
    Configuration config = new Configuration().configure();  
    //建立鏈接工廠  
    SessionFactory sf = config.buildSessionFactory();  
      
    //會話對象,表示與數據庫的鏈接會話過程,至關於jdbc的connection鏈接對象  
    Session session = null;  
    Transaction tx = null ;  
    try {  
        //獲取會話對象  
        session = sf.openSession();  
        //打開事務:Hibernate默認數據操做是不提交事務的,因此咱們要手動提交事務。  
        tx = session.beginTransaction();  
        //保存對象,持久化操做          
        session.save(user);  
        //提交事務          
        tx.commit();                  
    } catch (Exception e) {  
        e.printStackTrace();  
        //事務回滾          
        tx.rollback();  
    } finally{  
        //鏈接會話關閉  
        if(session!=null){  
            session.close();  
        }  
    }         
}

  這樣一看咱們的方法寫的代碼也是挺多了,想說的是這裏只是寫出了Hibernate框架是從建立sessionFactory對象,而後建立session對象,經過session對象進行對數據庫的操做。其實真正的開發中,咱們會把這些對象,事務的操做交給框架來管理,咱們須要作的就是持久化操做的那些代碼,是很是少的。

   綜上爲Hibernate實現一個簡單插入user數據的例子,固然若是數據庫關係複雜了,或者更多的設置,後邊會進行相關總結。最後來看看Hibernate框架的優缺點吧,固然這些優缺點都是相對而言呢,看用在什麼環境下了!

  優勢:

  1,輕量級的ORM框架

  2,對JDBC進行了很好的封裝,使用了ORM作了映射,那麼就能夠經過面向對象的方式很容易的操做數據庫了。

  3,它還提供了緩存機制,能夠提升效率。等

 

  缺點:

  1,若是對大量的數據進行頻繁的操做,性能效率比較低,不如直接使用JDBC

  總而言之對於框架,咱們利用其優秀的一面,避開其很差的一面,使其對咱們開發發揮最大的做用便可!!!

相關文章
相關標籤/搜索