1. 程式人生 > >Hibernate框架環境搭建(詳解)

Hibernate框架環境搭建(詳解)

obj 模型 junit demo 半成品 src 數據表 mys 種類

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

框架可以理解成一個半成品的項目,它封裝了一些功能,我麽需要掌握的是如何駕馭這些功能,不需要操心它是怎麽實現的。其實他就是按照我們之前所學的內容實現的。框架可以提高我們開發的效率。

技術分享圖片

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

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

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

hibernate是以面向對象的方式進行數據庫的增刪改查,甚至不用寫sql語句。

ORM:

是隨著面向對象的軟件開發方法發展而產生的。用來把對象模型表示的對象映射到基於S Q L 的關系模型數據庫結構中去。這樣,我們在具體的操作實體對象的時候,就不需要再去和復雜的 SQ L 語句打交道,只需簡單的操作實體對象的屬性和方法。O R M 技術是在對象和關系之間提供了一條橋梁,前臺的對象型數據和數據庫中的關系型的數據通過這個橋梁來相互轉化。


項目搭建過程:

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

技術分享圖片

除此之外,還需要一個數據庫驅動包。mysql驅動包

2、建立實體bean類

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

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

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

eg:小明考試考了零分和沒有參加考試是有區別的。如果使用基本類型則無法表示,但是使用包裝類,則可以設置為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、建立數據庫對應的表

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

技術分享圖片

4、 建立映射關系

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

技術分享圖片

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

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

5、配置hibernate核心配置文件

第一步:創建核心配置文件,文件的命名和位置都必須按照指定來,文件放在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>        <!--配置數據庫驅動-->        <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>        <!--        配置方言,指定用的什麽數據庫        sql語句方言,我們在上面設置了數據庫的信息是mysql        mysql 中的sql語句limit在Oracle中沒有        所以要設置方言        -->        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>        <!--設置hibernate執行SQL語句的時候,自動顯示在控制臺上-->        <property name="hibernate.show_sql">true</property>        <!--設置顯示的格式-->        <property name="hibernate.format_sql">true</property>        <!--        設置數據庫表的生成策略,自動建表        測試時:            create  每次執行hibernate 就會創建新的表,原來的數據就會丟失            create-drop 每次執行完hibernate之後就會將表給刪除掉 原來的數據就會丟失        開發時:            update  每次啟動檢查數據表是否有有更新,如果有則自動更新,如果沒有,則不變        validate    校驗  對數據表不進行任何操作        -->        <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對象,就是未建立數據表之前運行;運行後數據表自動創建。

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對象,自動生成表,讀取數據庫信息,檢查數據表是否更新        * 這個對象我們用它只用來獲取session        * 實際上這行代碼   它檢查了數據庫和實體類        * 如果有變化它會更新        * 非常耗費資源    解決方案:(封裝工具類)        * */        SessionFactory sessionFactory = configuration.buildSessionFactory();        /*使用sessionFactory獲得session對象*/        Session session = sessionFactory.openSession();        /*開啟事務        * hibernate 必須開啟事務        * 不開啟事務不會將數據保存到數據庫        * */        Transaction transaction = session.beginTransaction();        /*向數據表中插入一條數據*/        /*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();    }
}

如果能夠往數據表中添加數據的話,就說明你的hibernate框架項目搭建成功!!!



Hibernate框架環境搭建(詳解)