• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Hibernate框架學習筆記01

    1:hibernate是什么

    (1)框架是什么

    1.框架是用來提高開發效率的
    2.封裝好了一些功能.我們需要使用這些功能時,調用即可.不需要再手動實現.
    3.所以框架可以理解成是一個半成品的項目.只要懂得如何駕馭這些功能即可.

    (2)hibernate框架是什么

    這里寫圖片描述

    (3)hibernate的好處

    操作數據庫的時候,可以以面向對象的方式來完成.不需要書寫SQL語句

    (4)hibernate是一款orm框架

    orm:object relationg mapping. 對象關系映射
    這里寫圖片描述

    (5)orm分4級

    hibernate屬于4級:完全面向對象操作數據庫
    mybatis屬于2級
    dbutils屬于1級

    2:hibernate框架的搭建

    (1)導包(包括驅動包)

    這里寫圖片描述

    (2)創建數據庫hibernate_32(不能省略),準備表(可以省略)

    CREATE TABLE `cst_customer` (
      `cust_id` bigint(20) NOT NULL auto_increment,
      `cust_name` varchar(255) default NULL,
      `cust_source` varchar(255) default NULL,
      `cust_industry` varchar(255) default NULL,
      `cust_level` varchar(255) default NULL,
      `cust_linkman` varchar(255) default NULL,
      `cust_phone` varchar(255) default NULL,
      `cust_mobile` varchar(255) default NULL,
      PRIMARY KEY  (`cust_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    

    (3)書寫orm元數據(對象與表的映射配置文件)Customer.htm.xml

    a.導入約束 hibernate-mapping-3.0.dtd

    這里寫圖片描述

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    b.實體
    package cn.itheima.domain;
    
    public class Customer {
    
        private Long cust_id;
        private String cust_name;
        private String cust_source;
        private String cust_industry;
        private String cust_level;
        private String cust_linkman;
        private String cust_phone;
        private String cust_mobile;
    
        //get(),set()方法
        //toString()方法
    }
    
    c.orm元數據
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <!-- 配置表與實體對象的關系 -->
    <!-- package屬性:填寫一個包名.在元素內部凡是需要書寫完整類名的屬性,可以直接寫簡答類名了. -->    
    <hibernate-mapping package="cn.itheima.domain">
        <!-- 
        class元素: 配置實體與表的對應關系的
            name: 完整類名
            table:數據庫表名
         -->
        <class name="Customer" table="cst_customer">
            <!-- id元素:配置主鍵映射的屬性
                    name: 填寫主鍵對應屬性名
                    column(可選): 填寫表中的主鍵列名.默認值:列名會默認使用屬性名
                    type(可選):填寫列(屬性)的類型.hibernate會自動檢測實體的屬性類型.
                            每個類型有三種填法: java類型|hibernate類型|數據庫類型
                    not-null(可選):配置該屬性(列)是否不能為空. 默認值:false
                    length(可選):配置數據庫中列的長度. 默認值:使用數據庫類型的最大長度
             -->
            <id name="cust_id" column="cust_id">
                <!-- generator:主鍵生成策略 -->
                <generator class="native"></generator>
            </id>
            <!-- property元素:除id之外的普通屬性映射
                    name: 填寫屬性名
                    column(可選): 填寫列名
                    type(可選):填寫列(屬性)的類型.hibernate會自動檢測實體的屬性類型.
                            每個類型有三種填法: java類型|hibernate類型|數據庫類型
                    not-null(可選):配置該屬性(列)是否不能為空. 默認值:false
                    length(可選):配置數據庫中列的長度. 默認值:使用數據庫類型的最大長度
             -->
            <!-- <property name="cust_name" column="cust_name" type="java.lang.String"></property> -->
            <!-- <property name="cust_name" column="cust_name" type="string"></property> -->
            <property name="cust_name" column="cust_name">
                <!-- <column name="cust_name" sql-type="varchar"></column> -->
            </property>
            <property name="cust_source" column="cust_source"></property>
            <property name="cust_industry" column="cust_industry"></property>
            <property name="cust_level" column="cust_level"></property>
            <property name="cust_linkman" column="cust_linkman"></property>
            <property name="cust_phone" column="cust_phone"></property>
            <property name="cust_mobile" column="cust_mobile"></property>
        </class>
    </hibernate-mapping>

    (4)書寫主配置文件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>
            <!-- 
            #hibernate.dialect org.hibernate.dialect.MySQLDialect
            #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
            #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
            #hibernate.connection.driver_class com.mysql.jdbc.Driver
            #hibernate.connection.url jdbc:mysql:///test
            #hibernate.connection.username gavin
            #hibernate.connection.password
             -->
            <!-- 數據庫驅動 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <!-- 數據庫url -->
            <property name="hibernate.connection.url">jdbc:mysql:///hibernate_32</property>
            <!-- 數據庫連接用戶名 -->
            <property name="hibernate.connection.username">root</property>
            <!-- 數據庫連接密碼 -->
            <property name="hibernate.connection.password">root</property>
            <!-- 數據庫方言
                不同的數據庫中,sql語法略有區別. 指定方言可以讓hibernate框架在生成sql語句時.針對數據庫的方言生成.
                sql99標準: DDL 定義語言  庫表的增刪改查
                          DCL 控制語言  事務 權限
                          DML 操縱語言  增刪改查
                注意: MYSQL在選擇方言時,請選擇最短的方言.
             -->
             <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    
             <!-- #hibernate.show_sql true 
                 #hibernate.format_sql true
            -->
            <!-- 將hibernate生成的sql語句打印到控制臺 -->
            <property name="hibernate.show_sql">true</property>
            <!-- 將hibernate生成的sql語句格式化(語法縮進) -->
            <property name="hibernate.format_sql">true</property>
    
            <!-- 
            ## auto schema export  自動導出表結構. 自動建表
            #hibernate.hbm2ddl.auto create      自動建表.每次框架運行都會創建新的表.以前表將會被覆蓋,表數據會丟失.(開發環境中測試使用)
            #hibernate.hbm2ddl.auto create-drop 自動建表.每次框架運行結束都會將所有表刪除.(開發環境中測試使用)
            #hibernate.hbm2ddl.auto update(推薦使用) 自動生成表.如果已經存在不會再生成.如果表有變動.自動更新表(不會刪除任何數據).
            #hibernate.hbm2ddl.auto validate    校驗.不自動生成表.每次啟動會校驗數據庫中表是否正確.校驗失敗.
             -->
            <property name="hibernate.hbm2ddl.auto">update</property>
    
            <!-- 引入orm元數據 mapping-映射
                路徑書寫: 填寫src下的路徑
             -->
             <mapping resource="cn/itheima/domain/Customer.htm.xml"/>
        </session-factory>
    </hibernate-configuration>

    (5)代碼測試

    package cn.itheima.hello;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    import cn.itheima.domain.Customer;
    
    /*
     * 測試hibernate框架是否搭建成功
     */
    public class Demo {
    
        @Test
        public void fun1(){
            Configuration conf = new Configuration().configure();
            SessionFactory sessionFactory = conf.buildSessionFactory();
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            //-----------------------------------------
            Customer cus = new Customer();
            cus.setCust_name("google11111");
            session.save(cus);
            //-----------------------------------------
            tx.commit();
            session.close();
            sessionFactory.close();
        }
    
    
    }
    

    3.hibernate API詳解

    (1).Configuration

    a.創建
    //1創建,調用空參構造
    Configuration conf = new Configuration();
    b.加載主配置
    //2讀取指定主配置文件--》空參加載方法,加載src下的hibernate.cfg.xml文件
    conf.configure();
    c.加載orm元數據(擴展|了解)
    //3讀取指定orm元數據(擴展),如果主配置中已經引入了映射配置,不需要手動加載
    //conf.addResource(resourceName);
    //conf.addClass(persistentClass);
    d.創建sessionFactory
    //4 根據配置信息,創建 SessionFactory對象
    SessionFactory sessionFactory = conf.buildSessionFactory();

    (2).SessionFactory

    a. 學習SessionFactory對象
     * SessionFactory功能:用戶創建操作數據庫核心對象session對象的工廠,簡單說功能就一個----》創建session對象
     * 注意:1.sessionFactory負責保存和使用所有的配置信息,消耗內存資源非常大
     *      2.sessionFactory屬于線程安全的對象設計
     * 結論:保證在web項目中只創建一個sessionFactory
    
    
    //打開一個新的session對象
    Session session = sessionFactory.openSession();
    //獲得一個與線程綁定的session對象
    Session currentSession = sessionFactory.getCurrentSession();

    (3).session

    a.學習session對象
    * session對象功能:表達hibernate框架和數據庫之間的連接(會話)。session類似于JDBC年代的connection對象。
    * 還可以完成對數據庫中數據的增刪改查操作,session是hibernate操作數據庫的核心對象
    b.獲得事務
    //session獲得操作事務的Transaction對象,
    //獲得操作事務的tx對象
    Transaction tx1 = session.getTransaction();
    //開啟事務并獲得操作事務的tx對象(建議使用)
    Transaction tx = session.beginTransaction();
    c.增
    Customer cus = new Customer();
    cus.setCust_name("google11111");
    session.save(cus);
    d.查
    Customer customer = session.get(Customer.class, 1l);
    System.out.println(customer);
    e.改
    //1.獲得要修改的對象
            Customer customer = session.get(Customer.class, 1l);
    //2.設置
    customer.setCust_name("完美");
    //3.更新操作
    session.update(customer);
    d.刪
    //1.獲得要刪除的對象
    Customer customer = session.get(Customer.class, 1l);
    //2.刪除
    session.delete(customer);

    (4).Transaction

    //打開事務
    tx.begin();
    //提交事務
    tx.commit();
    //回滾事務
    tx.rollback();
    版權聲明:本文為m0_37301141原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/m0_37301141/article/details/74912290

    智能推薦

    Hibernate框架學習筆記03

    1.一對多|多對一 (1)關系表達 (2)操作 (3)進階操作 在保存時.兩方都會維護外鍵關系.關系維護兩次,冗余了. 多余的維護關系語句,顯然是客戶這一端在維護關系 2.多對多 (1)關系表達 (2)操作 (3)進階操作...

    【學習筆記-SSH框架】Hibernate高級-筆記01-類級別檢索策略

    Hibernate高級-筆記01-類級別檢索策略 目錄 檢索策略簡介 類級別立即加載 類級別延遲加載 0. 檢索策略簡介 在Hibernate中,Session主要有兩種檢索方法:get()和load(),這兩個方法都是用來從數據庫中檢索對象,并按照參數指定的對象標識符OID來加載一個持久化對象。 【示例】 檢索策略主要有以下兩種: 類級別檢索策略 使用Session的load()或get()方法...

    框架學習筆記之Hibernate框架基礎——Hibernate入門實例

      一、簡介: 面向java環境的對象/關系數據庫映射工具 不僅管理java類到庫的映射們還提供數據查詢和獲取數據的方法 對于開發者通常的數據持久化關于的編程任務,解放95% Hibernate對于中間層應用最好的場合。 相對于以數據操作的應用來說可能不是最好的選擇。 可以幫助開發者消除或者包裝那些針對特定廠商的sql代碼。建立跨越數據庫的應用平臺。 二、能做什么: 減少乏味的編碼,獲取...

    Java進階學習筆記(二)Hibernate框架

    Hibernate框架 一、概述 二、入門案例——使用Hibernate 1.安裝Hibernate插件到eclipse環境 1)下載hibernate tools插件:http://hibernate.org/ 2)安裝 注意取消勾選 Contact all update sites 2.導入Hibernate的jar包 3.創建持久化Java類 這里創建的持久化Java...

    JavaWeb學習筆記 (十三) Hibernate框架

    1.什么是Hibernate Hibernate框架是當今主流的Java持久層框架之一,是一個開源的ORM(Object Relational Mapping,對象關系映射)框架。對JDBC進行了輕量級的封裝,使得Java開發人員可以使用面向對象的編程思想來操作數據庫。 傳統JDBC的缺陷 使用傳統的JDBC開發系統時,對于一些小的應用時,sql語句比較簡單。但對于大型應用系統的開發,sql語句可...

    猜你喜歡

    Hibernate框架筆記01_環境搭建_API_CRUD

    文章目錄 1. Hibernate框架的概述 1.1 什么是框架 1.2 經典三層架構 1.3 Hibernate框架 2 Hibernate入門 2.1 下載Hibernate的開發包 2.2 創建項目,引入jar包 2.3 創建表 2.4 創建實體類 2.5 創建映射(***) 2.6 創建一個Hibernate的核心配置文件(***) 1.2.7 編寫測試代碼 3 hibernate的常見配...

    【學習筆記-SSH框架】Hibernate入門-筆記01-搭建Hibernate應用環境及實現增刪查改功能、以及Query、Criteria查詢

    Hibernate入門-筆記01-搭建Hibernate應用環境及實現增刪查改功能、以及Query、Criteria查詢 目錄 使用Maven搭建Hibernate項目 自頂向下開發Hibernate應用步驟 封裝Hibernate工具類 實現增刪查改功能 使用Query進行HQL查詢 使用Criteria進行條件查詢 POJO狀態 1. 使用Maven搭建Hibernate項目 在IDE中創建m...

    Spring框架學習筆記——01

    Spring概念 spring是開源的輕量級框架 spring核心主要兩部分: (1)aop:面向切面編程,擴展功能不是修改源代碼實現 (2)ioc:控制反轉 控制反轉:比如有一個類,在類里面有方法(不是靜態的方法),調用類里面的方法,創建類的對象,使用對象調用方法,創建類對象的過程,需要new出來對象 把對象的創建不是通過new方式實現,而是交給spring配置創建類對象 spring是一站式框...

    Spring框架學習筆記01

    1.spring介紹 (1)三層架構中spring位置 (2)spring一站式框架 2.spring搭建 (1)導包 logging是日志包 log4j可選 (2)創建一個對象 (3)書寫配置注冊對象到容器 (4)代碼測試 3.spring概念 (1)思想 (2)applicationContext&BeanFactory 4.spring配置詳解 (1)Bean元素 (2)Bean元素...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    精品国产乱码久久久久久蜜桃不卡