溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hibernate框架環(huán)境搭建(詳解)

發(fā)布時間:2020-07-20 00:48:43 來源:網(wǎng)絡 閱讀:795 作者:IT_laobai 欄目:開發(fā)技術

具體說hibernate框架的項目搭建之前,首先說一下什么是框架。。。

       框架可以理解成一個半成品的項目,它封裝了一些功能,我么需要掌握的是如何駕馭這些功能,不需要操心它是怎么實現(xiàn)的。其實他就是按照我們之前所學的內(nèi)容實現(xiàn)的??蚣芸梢蕴岣呶覀冮_發(fā)的效率。

        Hibernate框架環(huán)境搭建(詳解)

那么,簡單介紹一下,什么是hibernate框架?

      hibernate是dao層的框架,完成的功能是插入crud(增(create)、查(retrieve)、改(update)、刪(delete)).

      hibernate是一個ORM框架(對象關系映射)。(Object Relational Mapping)

      hibernate是以面向?qū)ο蟮姆绞竭M行數(shù)據(jù)庫的增刪改查,甚至不用寫sql語句。

ORM:

      是隨著面向?qū)ο蟮能浖_發(fā)方法發(fā)展而產(chǎn)生的。用來把對象模型表示的對象映射到基于S Q L 的關系模型數(shù)據(jù)庫結構中去。這樣,我們在具體的操作實體對象的時候,就不需要再去和復雜的 SQ L 語句打交道,只需簡單的操作實體對象的屬性和方法。O R M 技術是在對象和關系之間提供了一條橋梁,前臺的對象型數(shù)據(jù)和數(shù)據(jù)庫中的關系型的數(shù)據(jù)通過這個橋梁來相互轉(zhuǎn)化。


項目搭建過程:

1、導包 (hibernate-release-5.2.12.Final.rar)

    Hibernate框架環(huán)境搭建(詳解)

        除此之外,還需要一個數(shù)據(jù)庫驅(qū)動包。mysql驅(qū)動包

2、建立實體bean類

        ①.所有的屬性應該設置為private,并附加get和set方法

        ②.構造函數(shù),如果不寫的話是可以的;但是如果寫的話,至少要寫兩個(必須要包含一個空的構造函數(shù))

        ③.字段名要設置為包裝類。(為什么使用包裝類?)

                eg:小明考試考了零分和沒有參加考試是有區(qū)別的。如果使用基本類型則無法表示,但是使用包裝類,則可以設置為null

        ④.實體類中必須有一個id(主鍵)

具體代碼示例奉上:(以學生類為例,未寫構造方法)

package cn.hd.bean;public class Student {    private Integer sid;    private String name;    private String denger;    public Integer getSid() {        return sid;    }    public void setSid(Integer sid) {        this.sid = sid;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getDenger() {        return denger;    }    public void setDenger(String denger) {        this.denger = denger;    }    @Override    public String toString() {        return "Student{" +                "sid=" + sid +                ", name='" + name + '\'' +                ", denger='" + denger + '\'' +                '}';    }
}

3、建立數(shù)據(jù)庫對應的表

        可以省略,hibernate可以幫助我們自動根據(jù)實體類生成數(shù)據(jù)表。(具體代碼后面會奉上)

    Hibernate框架環(huán)境搭建(詳解)

   4、 建立映射關系

        第一步:建立一個配置文件,命名和位置都沒有強硬的規(guī)范,一般情況下規(guī)定,把這個文件放到對應的bean目錄下,命名規(guī)范為 實體類名 + .hbm  +.xml

        Hibernate框架環(huán)境搭建(詳解)

    第二步:導入約束文件,聲明這個文件是hibernate配置文件,導入之后書寫配置的時候會有提示信息。

<!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

       

    第三步:配置信息。

<hibernate-mapping>    <!--name:Javabean類的相對路徑,table:數(shù)據(jù)庫表名-->    <class name="cn.hd.bean.User" table="User">        <!--        id:數(shù)據(jù)庫中的主鍵,對應的是Javabean類中id(主鍵),和數(shù)據(jù)表中的主鍵,        name:代表的是實體類中的名字        column:代表的是字段名(可以省略不寫)        -->        <id name="uid" column="uid">            <!--            generator:主鍵生成策略                代理主鍵                    identity    是由數(shù)據(jù)庫自己維護,id自動加一                    increment   數(shù)據(jù)庫自己維護,自動查詢表中數(shù)據(jù),然后進行id加1                    hilo    高低位生成主鍵,需要用到一個額外的表,所有的數(shù)據(jù)庫都可以使用這種類型                    native  我們用的(代表的上面三個)                    uuid    (Java api 的生成策略,要自己去設置主鍵,)                自然主鍵                    assigned    手工指定,比如指定UUID            -->            <generator class="native"></generator>        </id>        <!--        其他的屬性        這里也可以設置數(shù)據(jù)庫中字段的屬性        type    生成表中的類型        legth        not-null        -->        <property name="name" column="name"/>        <property name="psd" column="psd"></property>    </class>

      補充:關于代理主鍵和自然主鍵 我的理解是,當將id也就是主鍵設置為int類型將它自動遞增時,用代理主鍵中的可以有數(shù)據(jù)庫自己維護,id自動增加的代理主鍵;而自然主鍵就是當id為其他類型的時候,需要手動添加主鍵的時候,去用自然主鍵。

5、配置hibernate核心配置文件

      第一步:創(chuàng)建核心配置文件,文件的命名和位置都必須按照指定來,文件放在src目錄下,文件名為hibernate.cfg.xml。

        第二步:導入約束文件。

<!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>        <!--配置數(shù)據(jù)庫驅(qū)動-->        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibrnate?useUnicode=true&amp;characterEncoding=utf-8</property>        <property name="hibernate.connection.username">root</property>        <property name="hibernate.connection.password">123</property>        <!--        配置方言,指定用的什么數(shù)據(jù)庫        sql語句方言,我們在上面設置了數(shù)據(jù)庫的信息是mysql        mysql 中的sql語句limit在Oracle中沒有        所以要設置方言        -->        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>        <!--設置hibernate執(zhí)行SQL語句的時候,自動顯示在控制臺上-->        <property name="hibernate.show_sql">true</property>        <!--設置顯示的格式-->        <property name="hibernate.format_sql">true</property>        <!--        設置數(shù)據(jù)庫表的生成策略,自動建表        測試時:            create  每次執(zhí)行hibernate 就會創(chuàng)建新的表,原來的數(shù)據(jù)就會丟失            create-drop 每次執(zhí)行完hibernate之后就會將表給刪除掉 原來的數(shù)據(jù)就會丟失        開發(fā)時:            update  每次啟動檢查數(shù)據(jù)表是否有有更新,如果有則自動更新,如果沒有,則不變        validate    校驗  對數(shù)據(jù)表不進行任何操作        -->        <property name="hibernate.hbm2ddl.auto">update</property>        <!--加載映射文件,將hbm配置文件配置到核心文件中,使其自動讀取-->        <mapping resource="cn/hd/bean/User.hbm.xml"></mapping>        <mapping resource="cn/hd/bean/Student.hbm.xml"></mapping>    </session-factory></hibernate-configuration>

6、書寫dao層測試代碼

    其中的student對象,就是未建立數(shù)據(jù)表之前運行;運行后數(shù)據(jù)表自動創(chuàng)建。

package cn.hd.test;import cn.hd.MyUtils.HibernateUtils;import cn.hd.bean.Student;import cn.hd.bean.User;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;public class Demo {    public static void main(String[] args) {        /*讀取配置文件 .configure()自動讀取cfg.xml文件*/        Configuration configuration = new Configuration().configure();        /*獲得sessionFactory對象,自動生成表,讀取數(shù)據(jù)庫信息,檢查數(shù)據(jù)表是否更新        * 這個對象我們用它只用來獲取session        * 實際上這行代碼   它檢查了數(shù)據(jù)庫和實體類        * 如果有變化它會更新        * 非常耗費資源    解決方案:(封裝工具類)        * */        SessionFactory sessionFactory = configuration.buildSessionFactory();        /*使用sessionFactory獲得session對象*/        Session session = sessionFactory.openSession();        /*開啟事務        * hibernate 必須開啟事務        * 不開啟事務不會將數(shù)據(jù)保存到數(shù)據(jù)庫        * */        Transaction transaction = session.beginTransaction();        /*向數(shù)據(jù)表中插入一條數(shù)據(jù)*/        /*User user = new User();        user.setName("張三");        user.setPsd("38383838");*/        Student student = new Student();        student.setName("張三");        student.setDenger("男");        /*添加、保存方法*/        session.save(student);        /*提交事務*/        transaction.commit();        /*關閉資源*/        session.close();        sessionFactory.close();    }
}

如果能夠往數(shù)據(jù)表中添加數(shù)據(jù)的話,就說明你的hibernate框架項目搭建成功?。。?/span>



向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI