Hibernate——hibernate的配置測試

來源:互聯網
上載者:User

標籤:on()   turn   orb   set   new   cto   tom   factory   產生器   

Hibernate

  Hibernate是一個開放原始碼的對象關係映射架構,它對JDBC進行了非常輕量級的對象封裝,它將POJO與資料庫表建立映射關係,是一個全自動的orm架構,hibernate可以自動產生SQL語句,自動執行,使得Java程式員可以隨心所欲的使用對象編程思維來操縱資料庫。 

語言特點
  • 將對資料庫的操作轉換為對Java對象的操作,從而簡化開發。通過修改一個“持久化”對象的屬性從而修改資料庫表中對應的記錄資料。
  • 提供線程和進程兩個層級的緩衝提升應用程式效能。
  • 有豐富的映射方式將Java對象之間的關係轉換為資料庫表之間的關係。
  • 屏蔽不同資料庫實現之間的差異。在Hibernate中只需要通過“方言”的形式指定當前使用的資料庫,就可以根據底層資料庫的實際情況產生適合的SQL語句。
  • 非侵入式:Hibernate不要求持久化類實現任何介面或繼承任何類,POJO即可。
核心API

  Hibernate的API一共有6個,分別為:Session、SessionFactory、Transaction、Query、Criteria和Configuration。通過這些介面,可以對持久化對象進行存取、事務控制。
Session
  Session介面負責執行被持久化對象的CRUD操作(CRUD的任務是完成與資料庫的交流,包含了很多常見的SQL語句)。但需要注意的是Session對象是非安全執行緒的。同時,Hibernate的session不同於JSP應用中的HttpSession。這裡當使用session這個術語時,其實指的是Hibernate中的session,而以後會將HttpSession對象稱為使用者session。
SessionFactory
  SessionFactory介面負責初始化Hibernate。它充當資料存放區源的代理,並負責建立Session對象。這裡用到了原廠模式。需要注意的是SessionFactory並不是輕量級的,因為一般情況下,一個項目通常只需要一個SessionFactory就夠,當需要操作多個資料庫時,可以為每個資料庫指定一個SessionFactory。
Transaction
  Transaction 介面是一個可選的API,可以選擇不使用這個介面,取而代之的是Hibernate 的設計者自己寫的底層交易處理代碼。 Transaction 介面是對實際事務實現的一個抽象,這些實現包括JDBC的事務、JTA 中的UserTransaction、甚至可以是CORBA 事務。之所以這樣設計是能讓開發人員能夠使用一個統一事務的操作介面,使得自己的項目可以在不同的環境和容器之間方便地移植。
Query
  Query介面讓你方便地對資料庫及持久對象進行查詢,它可以有兩種表達方式:HQL語言或本機資料庫的SQL語句。Query經常被用來綁定查詢參數、限制查詢記錄數量,並最終執行查詢操作。
Criteria
  Criteria介面與Query介面非常類似,允許建立並執行物件導向的標準化查詢。值得注意的是Criteria介面也是輕量級的,它不能在Session之外使用。
Configuration
  Configuration 類的作用是對Hibernate 進行配置,以及對它進行啟動。在Hibernate 的啟動過程中,Configuration 類的執行個體首先定位映射文檔的位置,讀取這些配置,然後建立一個SessionFactory對象。雖然Configuration 類在整個Hibernate 項目中只扮演著一個很小的角色,但它是啟動hibernate 時所遇到的第一個對象。

Hibernate的一些包的作用

net.sf.hibernate.*
該包的類基本上都是介面類和異常類
net.sf.hibernate.cache.*
JCS的實作類別
net.sf.hibernate.cfg.*
設定檔讀取類
net.sf.hibernate.collection.*
Hibernate集合介面實作類別,例如List,Set,Bag等等,Hibernate之所以要自行編寫集合介面實作類別是為了支援lazy loading
net.sf.hibernate.connection.*
幾個資料庫連接池的Provider
net.sf.hibernate.dialect.*
支援多種資料庫特性,每個Dialect實作類別代表一種資料庫,描述了該資料庫支援的資料類型和其它特點,例如是否有AutoIncrement,是否有Sequence,是否有分頁sql等等
net.sf.hibernate. eg.*
Hibernate文檔中用到的例子
net.sf.hibernate.engine.*
這個包的類作用比較散
net.sf.hibernate.expression.*
HQL支援的運算式
net.sf.hibernate.hq.*
HQL實現
net.sf.hibernate. id.*
ID產生器
net.sf.hibernate.impl.*
最核心的包,一些重要介面的實作類別,如Session,SessionFactory,Query等
net.sf.hibernate.jca.*
JCA支援,把Session封裝為支援JCA的介面實作類別
net.sf.hibernate.jmx.*
JMX是用來編寫App Server的管理程式的,大概是JMX部分介面的實現,使得App Server可以通過JMX介面管理Hibernate
net.sf.hibernate.loader.*
也是很核心的包,主要是產生sql語句的
net.sf.hibernate.lob.*
Blob和Clob支援
net.sf.hibernate.mapping.*
hbm檔案的屬性實現
net.sf.hibernate.metadata.*
PO的Meta實現
net.sf.hibernate.odmg.*
ODMG是一個ORM標準,這個包是ODMG標準的實作類別
net.sf.hibernate.persister.*
核心包,實現持久對象和表之間的映射
net.sf.hibernate.proxy.*
Proxy和Lazy Loading支援
net.sf.hibernate. ps.*
該包是PreparedStatment Cache
net.sf.hibernate.sql.*
產生JDBC sql語句的包
net.sf.hibernate.test.*
測試類別,你可以用junit來測試Hibernate
net.sf.hibernate.tool.hbm2ddl.*
用hbm設定檔產生DDL
net.sf.hibernate.transaction.*
Hibernate Transaction實作類別
net.sf.hibernate.type.*
Hibernate中定義的持久對象的屬性的資料類型
net.sf.hibernate.util.*
一些工具類,作用比較散
net.sf.hibernate.xml.*
XML資料繫結

Hibernate的配置

最終項目的結構如下

第一步:開始配置hibernate需要匯入許多個包,這個需要上官網下載,下載最新版就可以,:http://hibernate.org/orm/

下載解壓後在裡面找到這個路徑將以下目錄下的全部jar包匯入你的eclipse中建立的lib中,並引入

第二步:建立持久化類,並配置其.hbm.xml檔案

先解釋一下什麼叫持久化類

  持久化是將程式資料在持久狀態和瞬時狀態間轉換的機制。  持久化類(persistent class):可以被hibernate儲存到資料庫,並且從資料庫讀取的類。1、持久化類:是指其執行個體需要被Hibernate持久化到資料庫中的類。持久化類符合JavaBean的規範,包含一些屬性,以及與之對應的getXXX()和setXXX()方法。註:(1)get/set方法必須符合特定的命名規則,get和set後面緊跟屬性的名字,並且屬性名稱的首字母為大寫。(2)name屬性的get方法為getName(),如果寫成getname()或getNAME()會導致Hibernate在運行時拋出以下異常:net.sf.hibernate.PropertyNotFoundException:Could not find a getter for porperty name in class mypack XXX2、如果持久化類的屬性為boolean類型,那麼他的get方法名即可以用get作為首碼,也可以用is作為首碼。3、持久化類有一個id屬性,用來唯一標識Account類的每一個對象。這個id屬性被稱為對象標示符(OID,Object Identifier),通常它都用整數表示。4、Hibernate要求持久化類必須提供一個不帶參的預設構造方法,在程式運行時,Hibernate運用Java反射機制,調用java.Lang.raflect.Constructor.newInstance()方法來構造持久化類的執行個體。

通俗點說就是,資料庫中的表的欄位是咋樣持久化的屬性就咋樣,表名就是類名,之後可以系統產生set和get方法

我先建立User的持久化類:User.java

public class User {    private int id;    private String username;    private String passowrd;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassowrd() {        return passowrd;    }    public void setPassowrd(String passowrd) {        this.passowrd = passowrd;    }}

在建立其.hbm.xml檔案,這個檔案位置跟持久化類的位置一樣,同級

<?xml version="1.0" encoding="UTF-8" standalone="no"?><!-- Generated 2017-8-25 9:27:23 by Hibernate Tools 5.2.3.Final --><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping >    <class name="com.bean.User" table="user">        <id name="id" type="java.lang.Integer">            <generator class="native"/>        </id>            <property  name="username"  type="java.lang.String"/>            <property name="passowrd"  type="java.lang.String"/>  </class></hibernate-mapping>

第三步:配置hibernate.cfg.xml檔案

這個檔案的位置是在src下,與包同級

<?xml version=‘1.0‘ encoding=‘utf-8‘?><!--標準的XML檔案的起始行,version=‘1.0‘表明XML的版本,encoding=‘utf-8‘表明XML檔案的編碼方式,不能把第一行給佔了-->   <!DOCTYPE hibernate-configuration PUBLIC        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  <!--聲明Hibernate設定檔的開始--> <hibernate-configuration>   <!--表明以下的配置是針對session-factory配置的,SessionFactory是Hibernate中的一個類,這個類主要負責儲存HIbernate的配置資訊,以及對Session的操作-->       <session-factory>        <!--設定資料庫的驅動程式,Hibernate在串連資料庫時,需要用到資料庫的驅動程式-->           <property name="connection.driver_class">com.mysql.jdbc.Driver</property>        <!--設定資料庫的串連jdbc:mysql:///zhou,其中localhost表示mysql伺服器名稱,此處為本機,zhou是資料庫名-->          <property name="connection.url">jdbc:mysql:///zhou</property>         <!--串連資料庫的使用者名稱-->           <property name="connection.username">root</property>         <!--串連資料庫的密碼-->           <property name="connection.password">123456</property>     <!--是否在後台顯示Hibernate用到的SQL語句,開發時設定為true,便於差錯,程式運行時可以在Eclipse的控制台顯示Hibernate的執行Sql語句。項目部署後可以設定為false,提高運行效率-->           <property name="show_sql">true</property>        <!--hibernate.dialect 只是Hibernate使用的資料庫方言,就是要用Hibernate串連那種類型的資料庫伺服器。預設是使用這種方言-->             <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </property>        <!--update當項目啟動時更新資料庫,create是啟動時建立依據持久類的資料庫表 -->        <property name="hbm2ddl.auto">update</property>        <!-- XML注入方法 -->      <mapping resource="com/bean/User.hbm.xml"/>         <!-- 註解(annotation)注入方法 -->      <!--     <mapping class="com.bean.User"/> -->    </session-factory></hibernate-configuration>

第四步:編寫測試,看是否流程通暢

public static void main(String[] args) {        // TODO Auto-generated method stub        //讀取設定檔的資訊        Configuration config=new Configuration().configure();        //建立session的原廠模式        SessionFactory factory=config.buildSessionFactory();        //開啟session        Session session=    factory.openSession();        //開啟事務        Transaction transaction=    session.beginTransaction();        User user=    session.find(User.class, 1);        System.out.println(user.getUsername()+"---"+user.getPassowrd());        //提交事務        transaction.commit();        //關閉這兩個        session.close();        factory.close();            }

 

這些就是hibernate的最基本的配置及流程的通暢

 

【版本聲明】本文為博主原創文章,轉載請註明出處。

 

Hibernate——hibernate的配置測試

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.