• <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_環境搭建_API_CRUD

    1. Hibernate框架的概述

    1.1 什么是框架

    • 框架:指的是軟件的半成品,已經完成了部分功能。

    1.2 經典三層架構

    三層架構

    1.3 Hibernate框架

    • 什么是hibernate:Hibernate是一個持久層ORM框架

    • 什么是ORM:Object Relational Mapping(對象關系映射)。指的是將一個Java中的對象與關系型數據庫中的表建立一種映射關系,從而操作對象就可以操作數據庫中的表。

      對象關系映射

    2 Hibernate入門

    2.1 下載Hibernate的開發包

    2.2 創建項目,引入jar包

    • 數據庫驅動包mysql

    • hibernate開發必備包required

    • hibernate引入日志記錄包

    2.3 創建表

    CREATE TABLE `cst_customer` (
      `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客戶編號(主鍵)',
      `cust_name` varchar(32) NOT NULL COMMENT '客戶名稱(公司名稱)',
      `cust_source` varchar(32) DEFAULT NULL COMMENT '客戶信息來源',
      `cust_industry` varchar(32) DEFAULT NULL COMMENT '客戶所屬行業',
      `cust_level` varchar(32) DEFAULT NULL COMMENT '客戶級別',
      `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定電話',
      `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移動電話',
      PRIMARY KEY (`cust_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    

    2.4 創建實體類

    package com.itzhouq.hibernate.demo1;
    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_phone;
    	private String cust_mobile;
        //set/get。。。
    

    2.5 創建映射(***)

    • 映射需要通過XML的配置文件來完成,這個配置文件可以任意命名。盡量統一命名規范(類名.hbm.xml)

    • package com.itzhouq.hibernate.demo1;包下新建映射文件Customer.hbm.xml

    • 導入約束

      <!DOCTYPE hibernate-mapping PUBLIC 
          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://www.hibernate.org/dtd/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">
      
      <hibernate-mapping>
      	<!-- 建立類和表的映射 -->
      	<class name="com.itzhouq.hibernate.demo1.Customer" table="cst_customer">
      		<!-- 建立類中的屬性與表中的主鍵對應 -->
      		<id name="cust_id" column="cust_id">
      			<generator class="native"></generator>
      		</id>
      		
      		<!-- 建立表中的普通屬性和表中的字段的對應 -->
      		<property name="cust_name" column="cust_name"></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_phone" column="cust_phone"></property>
      		<property name="cust_mobile" column="cust_mobile"></property>
      	</class>
      	
      </hibernate-mapping>
      

    2.6 創建一個Hibernate的核心配置文件(***)

    • Hibernate的核心配置文件的名稱:hibernate.cfg.xml

    • 在src下新建核心配置文件hibernate.cfg.xml,導入約束

    • 配置核心文件,連接數據庫,用戶名,密碼等信息可以參考文件…\hibernate-release-5.0.7.Final\hibernate-release-5.0.7.Final\project\etc\hibernate.properties 56行 351行

      <?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="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">2626</property>
      		
      		<!-- 配置Hibernate的方言(可選的) -->
      		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
      		<!-- 打印SQL(可選的) -->
      		<property name="hibernate.show_sql">true</property>
      		<!-- 格式化SQL(可選的) -->
      		<property name="hibernate.format_sql">true</property>
      		
      		<!-- 配置映射文件 -->
      		<mapping resource="com/itzhouq/hibernate/demo1/Customer.hbm.xml"/>
      		
      	</session-factory>
      </hibernate-configuration>
      

    1.2.7 編寫測試代碼

    package com.itzhouq.hibernate.demo1;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    public class HIbernateDemo1 {
    	
    	//保存客戶的案例
    	@Test
    	public void demo1() {
    		// 1. 加載hibernate的核心配置文件
    		Configuration configure = new Configuration().configure();
    		// 2. 創建一個SessionFactory對象:類似于JDBC的中連接池
    		SessionFactory sessionFactory = configure.buildSessionFactory();
    		// 3. 通過SessionFactory獲取Session對象:類似于JDBC中Connection
    		Session session = sessionFactory.openSession();
    		// 4. 手動開啟事務
    		Transaction transaction = session.beginTransaction();
    		// 5. 編寫代碼
    		Customer customer = new Customer();
    		customer.setCust_name("老王");
    		
    		session.save(customer);
    		// 6. 提交事務
    		transaction.commit();
    		// 7. 釋放資源
    		session.close();
    	}
    }
    

    3 hibernate的常見配置

    3.1 XML的提示配置

    • 提前復制配置的連接http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd

    • 按照以下順序配置

      本地約束配置順序

    • 核心配置文件的提示配置方法類似

    3.2 Hibernate的映射的配置

    <?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">
    
    <hibernate-mapping>
    	<!-- 建立類和表的映射 -->
    	<class name="com.itzhouq.hibernate.demo1.Customer" table="cst_customer">
    		<!-- 建立類中的屬性與表中的主鍵對應 -->
    		<id name="cust_id" column="cust_id">
    			<generator class="native"></generator>
    		</id>
    		
    		<!-- 建立表中的普通屬性和表中的字段的對應 -->
    		<property name="cust_name" column="cust_name"></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_phone" column="cust_phone"></property>
    		<property name="cust_mobile" column="cust_mobile"></property>
    	</class>
    	
    </hibernate-mapping>
    
    • class標簽的配置
      • 標簽用來建立類與表的映射關系
      • 屬性:
        • name-----------類的全路徑名
        • table-----------表名(類名與表名一致時,table可以省略)
        • catalog--------數據庫名
    • id標簽的配置
      • 標簽用來建立類中的屬性與表中的主鍵的對應關系
      • 屬性:
        • name-----------類中的屬性名
        • column---------表中的字段名(類中的屬性和表中的字段名一致時,可以省略)
        • length-----------長度
        • type-------------類型
    • property標簽的配置
      • 標簽用來建立類中的普通屬性與表的字段的對應關系
      • 屬性:
        • name-----------類中的屬性名
        • column---------表中的字段名
        • length-----------長度
        • type-------------類型
        • not-null--------設置非空
        • unique---------設置唯一

    3.3 Hibernate的核心配置方式

    • 必須的配置------------連接數據庫的基本的參數
      • 驅動類
      • url路徑
      • 用戶名
      • 密碼
    • 可選的配置
      • 顯示SQL-----------hibernate.show_sql
      • 格式化SQL--------hibernate.format_sql
      • 自動建表-----------hibernate.hbm2ddl.auto
        • update如果數據庫中有表,使用原有表,如果沒有表,創建新表(更新表結構)
        • validate如果沒有表,不會創建表。只會使用數據庫中原有的表。(校驗映射和表結構)。
        • none:不使用hibernate的自動建表
        • create:如果數據庫中已經有表,刪除原有表,重新創建,如果沒有表,新建表。(測試)
        • create-drop:如果數據庫中已經有表,刪除原有表,執行操作,刪除這個表。如果沒有表,新建一個,使用完了刪除該表。(測試)
    • 映射文件的引入
      • 引入映射文件的位置

    4. Hibernate的核心API

    4.1 Configuration:Hibernate的配置對象

    • 作用:

      • 加載核心配置文件

        // 1. 加載hibernate的核心配置文件
        		Configuration configure = new Configuration().configure();
        
      • 加載映射文件

        <!-- 配置映射文件 -->
        		<mapping resource="com/itzhouq/hibernate/demo1/Customer.hbm.xml"/>
        
    • Configuration類的作用是對Hibernate進行配置,以及對它進行啟動。在hibernate的啟動過程中,Configuration類的實例首先定位映射文件的位置,讀取這些配置,然后創建一個SessionFactory對象。雖然Configuration類在整個Hibernate項目中只扮演一個很小的角色,但是他是啟動Hibernate時所遇到的第一個對象。

    4.2 SessionFactory:Session工廠

    • SessionFactory接口負責初始化Hibernate。它充當數據存儲源的代理,并負責創建Session對象。這里用到了工廠模式。徐婭注意的是SessionFactory并不是輕量級的,因為一般情況下,一個項目只需要一個SessionFactory就夠,當需要操作多個數據庫時,可以未每個數據庫指定一個SessionFactory。

    • SessionFactory內部維護了Hibernate的連接池和Hibernate的二級緩存(不講)。是線程安全的對象。一個項目創建一個對象即可。

    • 配置連接池,提取工具類

      • 導入c3p0的jar包…\hibernate-release-5.0.7.Final\hibernate-release-5.0.7.Final\lib\optional\c3p0
        • c3p0-0.9.2.1.jar
        • hibernate-c3p0-5.0.7.Final.jar
        • mchange-commons-java-0.2.3.4.jar
      • 在主配置文件中,添加以下配置
      <!-- 配置C3P0連接池 -->
      		<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
      		<!--在連接池中可用的數據庫連接的最少數目 -->
      		<property name="c3p0.min_size">5</property>
      		<!--在連接池中所有數據庫連接的最大數目  -->
      		<property name="c3p0.max_size">20</property>
      		<!--設定數據庫連接的過期時間,以秒為單位,
      		如果連接池中的某個數據庫連接處于空閑狀態的時間超過了timeout時間,就會從連接池中清除 -->
      		<property name="c3p0.timeout">120</property>
      		 <!--每3000秒檢查所有連接池中的空閑連接 以秒為單位-->
      		<property name="c3p0.idle_test_period">3000</property>
      
      • 新建一個包,創建一個工具類HibernateUtils.java

        package com.itzhouq.hibernate.utils;
        
        import org.hibernate.Session;
        import org.hibernate.SessionFactory;
        import org.hibernate.cfg.Configuration;
        
        /*
         * Hibernate的工具類
         */
        public class HibernateUtils {
        	public static final Configuration cfg;
        	public static final SessionFactory sf;
        	
        	static {
        		cfg = new Configuration().configure();
        		sf = cfg.buildSessionFactory();
        	}
        	
        	public static Session openSession() {
        		return sf.openSession();
        	}
        }
        
      • 配置之后測試類的代碼大大簡化了

        package com.itzhouq.hibernate.demo1;
        /*
         * Hibernate工具類的測試
         */
        
        import org.hibernate.Session;
        import org.hibernate.Transaction;
        import org.junit.Test;
        
        import com.itzhouq.hibernate.utils.HibernateUtils;
        
        public class HibernateDemo2 {
        	
        	@Test
        	//保存客戶
        	public void demo1() {
        		Session session = HibernateUtils.openSession();
        		Transaction tx = session.beginTransaction();
        		
        		Customer customer = new Customer();
        		customer.setCust_name("王曉東");
        		Serializable id = session.save(customer);
        		System.out.println("id = " + id);//1
        		tx.commit();
        		session.close();
        	}
        }
        

    4.3 Session:類似Connection對象是連接對象

    • session接口負責執行唄持久化對象的CRUD操作。但需要注意的是session對象是非線程安全的。同時,Hibernate的session不同于JSP應用中的HttpSession。這里的session類似于Connection。

    • Session中的API

      • 保存方法:

        • Serializable save(Object obj);

          @Test
          	//保存客戶
          	public void demo1() {
          		Session session = HibernateUtils.openSession();
          		Transaction tx = session.beginTransaction();
          		
          		Customer customer = new Customer();
          		customer.setCust_name("王曉東");
          		Serializable id = session.save(customer);
          		System.out.println("id = " + id);//1
          		
          		tx.commit();
          		session.close();
          	}
          
      • 查詢方法

        • T get(Class c, Serializable id)

        • T load(Class c, Serializable id)

          @Test
          	//查詢方法
          	public void demo2() {
          		Session session = HibernateUtils.openSession();
          		Transaction tx = session.beginTransaction();
          		
          //		Customer customer = session.get(Customer.class, 1L);
          //		System.out.println(customer);
          		
          		Customer customer = session.load(Customer.class, 1L);
          		System.out.println(customer);
          		
          		tx.commit();
          		session.close();
          	}
          
        • get方法和load方法的區別

        • get:

          1. 采用的是立即加載,執行到這行代碼的時候,就馬上發送sql語句去查詢。
          2. 查詢后返回的是一個真實對象本身。
          3. 查詢一個找不到的對象的時候,返回null;
        • load:

          1. 采用的延遲加載(lazy懶加載),執行到這行代碼的時候,不會立即發送SQL語句,當真正使用這個對象的時候才會發送sql語句。
          2. 擦汗尋后返回的代理對象,利用javassist技術產生的代理。
          3. 查詢一個找不到的對象的時候,拋出異常。
      • 修改方法

        • void update(Object obj)

      • 刪除方法

        • void delete(Object obj)

      • 查詢所有

    4.4 Transaction:事務對象

    • Hibernate中管理事務的對象
      • commit()
      • rollback()
    版權聲明:本文為qq_36645607原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_36645607/article/details/89459407

    智能推薦

    hibernate-01框架的搭建

    1.hibernate簡介 框架:提高開發效率,即封裝好了一些功能導入jar包后調用即可,框架也可以理解成是一個半成品的項目 hibernate框架:在進行web開發時我們采用三層架構(web、service、dao),hibernate就是dao層框架 優點:操作數據庫時采用面向對象的方式完成,不需要書寫sql語句 hibernate是一款orm框架:orm對象關系映射(object relat...

    Git筆記_01_起步

    起步 版本控制簡介 安裝Git Git官方下載地址 如果下載慢可以使用這一個地址下載windows版本的Git for win 初次運行Git需要進行的配置 Git的config文件的介紹 Git 自帶一個 git config 的工具來幫助設置控制 Git 外觀和行為的配置變量。 這些變量存儲在三個不同的位置: /etc/gitconfig 文件: 包含系統上每一個用戶及他們倉庫的通用配置。 如...

    Hibernate 框架(二)(下載及環境搭建)

    一、Hibernate下載 1、通過下面網站進行下載:https://zh.osdn.net/,進入網站如下圖所示。   2、單擊頁面頂部的導航欄中的“下載”,即可進入 3、在搜索框中輸入hibernate,如下圖所示。 4、單擊“搜索”按鈕,進入搜索結果界面,如下圖所示。 5、單擊上圖中的超文本"Hibernate",...

    Hibernate(一)——采用Hibernate框架開發環境搭建

    Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員充分使用對象編程思維來操作數據庫。HIbernate的移植性很好,它可以應用于任何JDBC使用的場合。 下面我們從搭建開發環境開始,來學習Hibernate。 1、新建一個java項目:hibernate_test.別的項目也可以,上面已經提到,Hibernate的移植性很好,可以在Ja...

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

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

    猜你喜歡

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

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