1. 程式人生 > >Hibernate框架入門學習

Hibernate框架入門學習

1.Hibernate框架入門


目錄

1.Hibernate框架入門

1.1什麼是Hibernate框架?

1.2為什麼使用Hibernate框架?

1.3怎樣使用Hibernate框架?

1.3.1 搭建Hibernate環境

1.3.2 建立表與實體類

1.3.3 建立檔案對映(關鍵)

1.3.4 建立Hibernate核心對映(關鍵)

1.3.4 使用Hibernate API


 

1.1什麼是Hibernate框架?

框架:軟體的半成品,已經實現部分功能。

 

Hibernate框架是一種持久層的ORM(object relational mapping)框架,實現了資料庫中表、欄位與持久層中的類、成員變數之間的對映關係,使得我們可以通過操作類物件來對資料庫中的表進行CRUD(create

、retrieve、update、delete)操作。

 

J2EE經典三層結構:

 

ORM概述:


 

1.2為什麼使用Hibernate框架?


 

1.3怎樣使用Hibernate框架?

1.3.1 搭建Hibernate環境

Hibernate5.x是目前較新的版本,也是目前企業流行的版本,這裡以Hibernate5.0.7為例進行Hibernate的學習.

下載Hibernate5.0.7:https://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/

        

Hibernate檔案目錄說明:

1. DocumentationHibernate開發文件

2. LibHibernate 的Jar包Required:

  •                    Hibernate核心也是必須的Jar包
  •                   Optional: Hibernate可選擇的Jar包

3. ProjectHibernate官方提供的例項

 

引入Jar包支援:

建立一個Java Object專案來進行Hibernate入門學習,並引入如下的jar包支援,Java Object中還用手工將jar包build path一下;引入jar包如下:

  1. Hibernate必須包
  2. C3p0支援包(可選jar包)
  3. log支援包
  4. 資料庫驅動包

 

1.3.2 建立表與實體類

建立資料表cust_customer(MYSQL資料庫):

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;

 

建立實體類Customer (並新增setter/getter方法、重寫toString方法)

1.3.3 建立檔案對映(關鍵)

建立檔案對映Customer.hbm.xml檔案:

         標籤及屬性介紹:

1. Class標籤:實體類與資料表之間的對映關係

  1. Name屬性      :實體類路徑
  2. Table屬性        :對應的資料表名
  3. Catalog屬性   :對應的資料庫名(可省略)

 

2. Id標籤:特定成員變數與主鍵之間的對映關係

  1. Name屬性      :特定成員變數名
  2. Column屬性   :表中的主鍵欄位名(類中的屬性名和表中的欄位名如果一

                                                                                    column可以省略)

  1. Length屬性     :長度
  2. type 屬性         :型別
  3. Generator屬性:識別符號生成器

 

3. Property標籤:普通成員變數與資料庫普通欄位之間的對映關係

  1. Name屬性      :普通成員變數名
  2. Column屬性   :表中的普通欄位名
  3. Length屬性     :長度
  4. type 屬性         :型別

  

 

1.3.4 建立Hibernate核心對映(關鍵)

建立Hibernate對映檔案hibernate.cfg.xml檔案:

 

Hibernate的核心配置:

 1. 必須的配置

    連線資料庫的基本的引數

  1. 驅動類
  2. url路徑
  3. 使用者名稱
  4. 密碼

  2. 方言

  3.可選的配置

  1. 顯示SQL           :hibernate.show_sql
  2. 格式化SQL      :hibernate.format_sql
  3. 自動建表         :hibernate.hbm2ddl.auto
    1. none                   :不使用hibernate的自動建表
    2. create                :如果資料庫中已經有表,刪除原有表,重新建立,如果沒有表,新建表。(測試)
    3. create-drop      :如果資料庫中已經有表,刪除原有表,執行操作,刪除這個表。如果沒有表,新建一個,使用完了刪除該表。(測試)
    4. update              :如果資料庫中有表,使用原有表,如果沒有表,建立新表(更新表結構)
    5. validate            :如果沒有表,不會建立表。只會使用資料庫中原有的表。(校驗對映和表結構)。

 

  對映檔案的引入       

    1. 引入對映檔案的位置

 

  加入C3p0支援:

 

1.3.4 使用Hibernate API

Hibernate API使用步驟:

         //1.載入hibernate核心配置

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

 

         //2.建立一個SessionFactory物件:jdbc連線池

         SessionFactory sessionFactory=configuration.buildSessionFactory();

                  

         //3.獲得session物件:jdbc中的Connection

         Session session=sessionFactory.openSession();

                  

         //4.手動開啟事務

         Transaction transaction=session.beginTransaction();   

                  

         //5.編寫程式碼

         ---------處理事情--------

                  

         //6.事務提交

         transaction.commit();

                                    

         //7.資源釋放

         session.close();

 

詳細介紹:

(1)Configuration用來載入hibernate的核心配置檔案,配置檔案可以是xml格式、屬性檔案格式。

         1.Xml格式載入配置檔案的方法:

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

         2.屬性檔案格式載入配置檔案的方法:

Configuration configuration=new Configuration();

由於屬性檔案中不能將檔案對映到hibernate的核心檔案中,故這種方法需要程式設計將檔案對映進來:

configuration.addResource(“ com/sc/demo1/Customer.hbm.xml ”);

 

(2) SessionFactory: session工廠,內部維護了Hibernate執行緒池和二級快取,是執行緒安全的,一個專案建立一次即可。

使用:     SessionFactory sessionFactory = configuration.buildSessionFactory( );

                   Session session = sessionFactory.openSession( );

 

(3)Session: 代表的是Hibernate與資料庫的連結物件,不是執行緒安全的。他是與資料庫互動橋樑。

  1. session.save( );                                 儲存操作
  2. session.get( ); session.load( );      都是查詢操作,load是延時查詢;get是立即查詢
  3. session.update( );                           更新操作
  4. session.delete( );                               刪除操作

  

4Transaction: Hibernate中管理事務的物件。

  1. transaction transaction=session.beginTransaction( );        手動開啟事務
  2. transaction.commit( );                                                                    提交事務
  3. transaction.rollback( );                                                                   事務回滾

 

session對資料庫的CRUD操作:

                   //儲存

                   Customer customer=new Customer();

                   customer.setCust_id(201622);

                   customer.setCust_name("xiao");

                   session.save(customer);

                  

                   //id查詢

                            //(1)get方法

                   Customer customer11=session.get(Customer.class, 7l);

                   System.out.println("get方法customer11:"+customer11);

                           //(2)load方法

                   Customer customer12=session.load(Customer.class, 7l);

                   System.out.println("load方法customer12:"+customer12);

                  

                   //修改

                           //(1)直接修改

                   Customer customer21=new Customer();

                   customer21.setCust_id(7l);

                   customer21.setCust_name("汪雪飛");

                   session.update(customer21);

                   System.out.println("直接修改方法customer21:"+customer21);

                            //(2)間接修改

                   Customer customer22=session.get(Customer.class, 12l);

                   customer22.setCust_name("xiao飛飛");

                   session.update(customer22);

                   System.out.println("間接修改方法customer22:"+customer22);

                  

                  //刪除

                            //(1)直接刪除

                   Customer customer31=new Customer();

                   customer31.setCust_id(7l);

                   session.delete(customer31);

                            //(2)間接刪除(適合級聯刪除)

                   Customer customer32=session.get(Customer.class, 12l);

                   session.delete(customer32);


下接Hibernate持久化類詳解:https://blog.csdn.net/biggerchong/article/details/84260707

                                                                  ---------謝謝您的閱讀!加油!              ----------知飛翀