搭建Hibernate開(kāi)發(fā)環(huán)境

前面已經(jīng)介紹了Hibernate的一點(diǎn)知識(shí),現(xiàn)在我們來(lái)一步一步開(kāi)發(fā)Hibernate程序來(lái)學(xué)習(xí)。在這里我使用IDEA作為開(kāi)發(fā)工具,Gradle作為項(xiàng)目構(gòu)建工具。當(dāng)然在實(shí)際中不一定必須使用這兩個(gè)工具,我們可以選擇自己習(xí)慣使用的工具。只要正確的添加了Hibernate相關(guān)類以及數(shù)據(jù)庫(kù)驅(qū)動(dòng),我們就能正確的運(yùn)行Hibernate程序了。

新建項(xiàng)目

使用IDEA新建一個(gè)Gradle項(xiàng)目,新建之后,在build.gradle文件中添加如下內(nèi)容:

group 'yitian.learning'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'war'
apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'
apply plugin: 'eclipse'
apply plugin: 'idea'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
    // compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.5'
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.40'

    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.5.Final'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

在Gradle解決項(xiàng)目依賴之后,我們就可以開(kāi)始搭建Hibernate開(kāi)發(fā)環(huán)境了。

SessionFactory

SessionFactory是Hibernate最重要的一個(gè)類,也是我們配置和使用Hibernate的第一步。它類似于我們學(xué)習(xí)JDBC時(shí)候的數(shù)據(jù)庫(kù)連接,SessionFactory會(huì)為我們管理做好所有事情。一般情況下一個(gè)項(xiàng)目只需要一個(gè)SessionFactory就可以了。我們需要做的,就是編寫它的配置文件hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

    <session-factory>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/htest?useSSL=false</property>
        <property name="connection.username">root</property>
        <property name="connection.password">12345678</property>

        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">create</property>

    </session-factory>

</hibernate-configuration>

以上就是Hibernate的配置文件,有JDBC開(kāi)發(fā)經(jīng)驗(yàn)的同學(xué)應(yīng)該很熟悉前面幾項(xiàng)內(nèi)容吧。重點(diǎn)是后面這幾項(xiàng)。

  • dialect 代表的是Hibernate使用的方言。Hibernate設(shè)計(jì)時(shí)候考慮到了多種數(shù)據(jù)庫(kù),所以這里需要指定我們使用的數(shù)據(jù)庫(kù)。在這里我是用的就是MySQL數(shù)據(jù)庫(kù)。
  • show_sql 代表的是在Hibernate會(huì)在運(yùn)行的時(shí)候同時(shí)將所執(zhí)行的SQL語(yǔ)句輸出到控制臺(tái)上,方便我們開(kāi)發(fā)調(diào)試。
  • format_sql 代表將上面輸出的SQL語(yǔ)句格式化,方便我們開(kāi)發(fā)。
  • hbm2ddl.auto 代表的是數(shù)據(jù)庫(kù)的生成策略。在這里使用create代表每次運(yùn)行程序都重新創(chuàng)建數(shù)據(jù)庫(kù)。這也是我們開(kāi)發(fā)時(shí)常用的選項(xiàng)。

配置文件寫好之后,我們就可以開(kāi)始創(chuàng)建SessionFactory了。隨著Hibernate的更新,SessionFactory的創(chuàng)建方式也發(fā)生了變化。以前我看視頻教程的時(shí)候,我照著老師的創(chuàng)建方式創(chuàng)建SessionFactory的時(shí)候,Hibernate提示我老師講的那種方式已經(jīng)過(guò)時(shí)了。不過(guò)現(xiàn)在我直接看的Hibernate官方文檔,所以下面這個(gè)方式應(yīng)該是比較新的。

package yitian.data;

import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

public class HibernateUtil {
    private static SessionFactory sessionFactory;

    static {
        final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
                .configure()
                .build();
        try {
            sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        } catch (Exception e) {
            StandardServiceRegistryBuilder.destroy(registry);
            throw new RuntimeException(e);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

這就是我的SessionFactory創(chuàng)建類,為了省事我直接寫為了靜態(tài)類,實(shí)際情況中一般使用Spring來(lái)管理Hibernate SessionFactory的生命周期。重點(diǎn)是靜態(tài)初始化塊中的代碼,這就是Hibernate的初始化方式。StandardServiceRegistryBuilder類會(huì)搜索我們剛才寫的hibernate.cfg.xml配置文件,所以為了保證正確的初始化SessionFactory,一般情況下需要將hibernate.cfg.xml放在CLASSPATH下。由于我用的是Gradle,所以配置文件要放在resources文件夾下。如果是普通的Java Web項(xiàng)目,就放在webapps/WEB-INF下。一開(kāi)始我直接從Hibernate官方教程抄的代碼,結(jié)果它直接在catch中吃掉了異常,導(dǎo)致我一天沒(méi)搞明白錯(cuò)誤在哪里。因此在這里我加上了拋出語(yǔ)句。

接下來(lái)測(cè)試一下SessionFactory是否配置成功。我在這里將單元測(cè)試寫在src/test/java文件夾中,以便讓Gradle自動(dòng)運(yùn)行這些測(cè)試。

package yitian.data;

import org.hibernate.SessionFactory;
import org.junit.*;

public class HibernateTest {
    private static SessionFactory factory;

    @BeforeClass
    public static void init() {
        factory = HibernateUtil.getSessionFactory();
    }

    @Test
    public void testHibernate() {
        Assert.assertNotNull(factory);
    }

    @AfterClass
    public static void clean() {
        factory.close();
    }
}

這個(gè)單元測(cè)試很簡(jiǎn)單,就是看一下SessionFactory是否為空。使用Gradle的話運(yùn)行一下gradle test命令即可。如果沒(méi)有使用Gradle的話也可以使用Eclipse或者IDEA提供的單元測(cè)試工具來(lái)測(cè)試。

測(cè)試完成之后,我們就可以開(kāi)始以后的Hibernate學(xué)習(xí)了。單元測(cè)試結(jié)果和目前的項(xiàng)目結(jié)構(gòu)如下:
項(xiàng)目結(jié)構(gòu)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,034評(píng)論 25 709
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評(píng)論 6 342
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 子曰:“不憤不啟,不悱不發(fā),舉一隅不以三隅反,則不復(fù)也?!?哈皮波白話試譯: 孔子講:“等到他思考沒(méi)有結(jié)果的時(shí)候再...
    哈皮波閱讀 1,502評(píng)論 0 1
  • - Why and what thinking - fixed and increasing thinking -...
    longliveping閱讀 417評(píng)論 0 0

友情鏈接更多精彩內(nèi)容