hibernate入門和基本操作

什麼是框架

寫程序,使用框架之後,幫我們實現一部分功能,使用框架好處,少寫一部分代碼實現功能

什麼是hibernate框架(重點)

  1. hibernate框架應用在javaee三層結構中dao層框架
  2. 在dao層裏面做對數據庫crud(增刪改查)操作,使用hibernate實現crud操作,hibernate底層代碼就是jdbc,hibernate對jdbc進行封裝,使用hibernate好處,不需要寫複雜jdbc代碼了,
    不需要寫sql語句實現
  3. hibernate開源的輕量級的框架
  4. hibernate版本
    • Hibernate3.x
    • Hibernate4.x
    • Hibernate5.x(學習)

什麼是orm思想(重點)

  1. hibernate使用orm思想對數據庫進行crud操作
  2. 在web階段學習 javabean,更正確的叫法 實體類
  3. orm:object relational mapping,對象關係映射
    • 文字描述:
      1. 讓實體類和數據庫表進行一一對應關係
        讓實體類首先和數據庫表對應
        讓實體類屬性 和 表裏面字段對應
      2. 不需要直接操作數據庫表,而操作表對應實體類對象
    • 畫圖描述:
      這裏寫圖片描述
      這裏寫圖片描述

Hibernate入門

搭建hibernate環境(重點)

1. 第一步 導入hibernate的jar包

這裏寫圖片描述

在項目目錄下(和src同一級)創建lib文件夾,將jar包複製到lib文件夾下,選中jar包→右鍵→build path,如下圖

這裏寫圖片描述

2.第二步 創建實體類

public class User {
    /*hibernate要求實體類有一個屬性唯一的*/  
    private Integer uid;
    private String username;
    private String password;
    private String address;

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

使用hibernate時候,不需要自己手動創建表,hibernate幫忙把表創建好

第三步 配置實體類和數據庫表一一對應關係(映射關係)

  • 使用配置文件實現映射關係
    1. 創建xml格式的配置文件
      • 映射配置文件名稱和位置沒有固定要求
      • 建議:在實體類所在包裏面創建,實體類名稱.hbm.xml
    2. 配置是xml格式,在配置文件中首先引入xml約束
      • 學過約束dtd、schema,在hibernate裏面引入的約束dtd約束(hibernate-mapping-3.0.dtd)
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  1. 配置映射關係
<hibernate-mapping>
    <!-- 1 配置類和表對應 
        class標籤
        name屬性:實體類全路徑
        table屬性:數據庫表名稱
    -->
    <class name="cn.itcast.entity.User" table="t_user">
        <!-- 2 配置實體類id和表id對應 
            hibernate要求實體類有一個屬性唯一值
            hibernate要求表有字段作爲唯一值
        -->
        <!-- id標籤
            name屬性:實體類裏面id屬性名稱
            column屬性:生成的表字段名稱
         -->
        <id name="uid" column="uid">
            <!-- 設置數據庫表id增長策略 
                native:生成表id值就是主鍵自動增長
            -->
            <generator class="native"></generator>
        </id>
        <!-- 配置其他屬性和表字段對應 
            name屬性:實體類屬性名稱
            column屬性:生成表字段名稱
        -->
        <property name="username" column="username"></property>
        <property name="password" column="password"></property>
        <property name="address" column="address"></property>
    </class>
</hibernate-mapping>

第四步 創建hibernate的核心配置文件

(1)核心配置文件格式xml,但是核心配置文件名稱和位置固定的
  • 位置:必須src下面
  • 名稱:必須hibernate.cfg.xml
    這裏寫圖片描述
(2)引入dtd約束
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
(3)hibernate操作過程中,只會加載核心配置文件,其他配置文件不會加載
第一部分: 配置數據庫信息 必須的
<!-- 第一部分: 配置數據庫信息 必須的 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">123456</property>
第二部分: 配置hibernate信息 可選的
<!-- 第二部分: 配置hibernate信息  可選的-->
        <!-- 輸出底層sql語句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 輸出底層sql語句格式 -->
        <property name="hibernate.format_sql">true</property>
        <!-- hibernate幫創建表,需要配置之後 
            update: 如果已經有表,更新,如果沒有,創建
        -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- 配置數據庫方言
            在mysql裏面實現分頁 關鍵字 limit,只能使用mysql裏面
            在oracle數據庫,實現分頁rownum
            讓hibernate框架識別不同數據庫的自己特有的語句
         -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
第三部分: 把映射文件放到核心配置文件中
<!-- 第三部分: 把映射文件放到核心配置文件中 必須的-->
        <mapping resource="com/lightning/entity/User.hbm.xml"/>

實現添加操作

  • 第一步 加載hibernate核心配置文件

  • 第二步 創建SessionFactory對象

  • 第三步 使用SessionFactory創建session對象

  • 第四步 開啓事務

  • 第五步 寫具體邏輯 crud操作

  • 第六步 提交事務

  • 第七步 關閉資源

@Test
    public void testAdd() {
//      第一步 加載hibernate核心配置文件
        // 到src下面找到名稱是hibernate.cfg.xml
        //在hibernate裏面封裝對象
        Configuration cfg = new Configuration();
        cfg.configure();

//      第二步 創建SessionFactory對象
        //讀取hibernate核心配置文件內容,創建sessionFactory
        //在過程中,根據映射關係,在配置數據庫裏面把表創建
        SessionFactory sessionFactory = cfg.buildSessionFactory();

//      第三步 使用SessionFactory創建session對象
        // 類似於連接
        Session session = sessionFactory.openSession();

//      第四步 開啓事務
        Transaction tx = session.beginTransaction();

//      第五步 寫具體邏輯 crud操作
        //添加功能
        User user = new User();
        user.setUsername("張三");
        user.setPassword("123");
        user.setAddress("中國");
        //調用session的方法實現添加
        session.save(user);

//      第六步 提交事務
        tx.commit();

//      第七步 關閉資源
        session.close();
        sessionFactory.close();
    }

看到效果:

(1)是否生成表

這裏寫圖片描述

(2)看錶是否有記錄

這裏寫圖片描述

Hibernate配置文件詳解

Hibernate映射配置文件(重點)

  • 1 映射配置文件名稱和位置沒有固定要求

  • 2 映射配置文件中,標籤name屬性值寫實體類相關內容
    (1)class標籤name屬性值實體類全路徑
    (2)id標籤和property標籤name屬性值 實體類屬性名稱

  • 3 id標籤和property標籤,column屬性可以省略的
    (1)不寫值和name屬性值一樣的

  • 4 property標籤type屬性,設置生成表字段的類型,自動對應類型

Hibernate核心配置文件

1 配置寫位置要求
這裏寫圖片描述

2 配置三部分要求
(1)數據庫部分必須的
(2)hibernate部分可選的
(3)映射文件必須的

3 核心配置文件名稱和位置固定的
(1)位置:src下面
(2)名稱:hibernate.cfg.xml

Hibernate核心api

1 代碼

Configuration cfg = new Configuration();
        cfg.configure();

(1)到src下面找到名稱hibernate.cfg.xml配置文件,創建對象,把配置文件放到對象裏面(加載核心配置文件)

SessionFactory(重點)

1 使用configuration對象創建sessionFactory對象
(1)創建sessionfactory過程中做事情:
- 根據核心配置文件中,有數據庫配置,有映射文件部分,到數據庫裏面根據映射關係把表創建

<property name="hibernate.hbm2ddl.auto">update</property>

2 創建sessionFactory過程中,這個過程特別耗資源的
(1)在hibernate操作中,建議一個項目一般創建一個sessionFactory對象

3 具體實現
(1)寫工具類,寫靜態代碼塊實現
* 靜態代碼塊在類加載時候執行,執行一次

static Configuration cfg = null;
    static SessionFactory sessionFactory = null;
    //靜態代碼塊實現
    static {
        //加載核心配置文件
        cfg = new Configuration();
        cfg.configure();
        sessionFactory = cfg.buildSessionFactory();
    }

    //提供方法返回sessionFactory
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

Session(重點)

1 session類似於jdbc中connection

2 調用session裏面不同的方法實現crud操作
(1)添加 save方法
(2)修改 update方法
(3)刪除 delete方法
(4)根據id查詢 get方法

3 session對象單線程對象
(1)session對象不能共用,只能自己使用

Transaction

1 事務對象

Transaction tx = session.beginTransaction();

2 事務提交和回滾方法

tx.commit();

tx.rollback();

解決配置文件沒有提示問題

Windows→ Preferences→搜索框輸入xml c→XML catalog→Add→Catalog Entry 如下圖所示

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章