Hibernate框架入門學習
1.Hibernate框架入門
目錄
1.1什麼是Hibernate框架?
框架:軟體的半成品,已經實現部分功能。
Hibernate框架是一種持久層的ORM(object relational mapping)框架,實現了資料庫中表、欄位與持久層中的類、成員變數之間的對映關係,使得我們可以通過操作類物件來對資料庫中的表進行CRUD(create
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. Documentation:Hibernate開發文件
2. Lib:Hibernate 的Jar包Required:
- Hibernate核心也是必須的Jar包
- Optional: Hibernate可選擇的Jar包
3. Project:Hibernate官方提供的例項
引入Jar包支援:
建立一個Java Object專案來進行Hibernate入門學習,並引入如下的jar包支援,Java Object中還用手工將jar包build path一下;引入jar包如下:
- Hibernate必須包
- C3p0支援包(可選jar包)
- log支援包
- 資料庫驅動包
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標籤:實體類與資料表之間的對映關係
- Name屬性 :實體類路徑
- Table屬性 :對應的資料表名
- Catalog屬性 :對應的資料庫名(可省略)
2. Id標籤:特定成員變數與主鍵之間的對映關係
- Name屬性 :特定成員變數名
- Column屬性 :表中的主鍵欄位名(類中的屬性名和表中的欄位名如果一
column可以省略)
- Length屬性 :長度
- type 屬性 :型別
- Generator屬性:識別符號生成器
3. Property標籤:普通成員變數與資料庫普通欄位之間的對映關係
- Name屬性 :普通成員變數名
- Column屬性 :表中的普通欄位名
- Length屬性 :長度
- type 屬性 :型別
1.3.4 建立Hibernate核心對映(關鍵)
建立Hibernate對映檔案hibernate.cfg.xml檔案:
Hibernate的核心配置:
1. 必須的配置
連線資料庫的基本的引數
- 驅動類
- url路徑
- 使用者名稱
- 密碼
2. 方言
3.可選的配置
- 顯示SQL :hibernate.show_sql
- 格式化SQL :hibernate.format_sql
- 自動建表 :hibernate.hbm2ddl.auto
- none :不使用hibernate的自動建表
- create :如果資料庫中已經有表,刪除原有表,重新建立,如果沒有表,新建表。(測試)
- create-drop :如果資料庫中已經有表,刪除原有表,執行操作,刪除這個表。如果沒有表,新建一個,使用完了刪除該表。(測試)
- update :如果資料庫中有表,使用原有表,如果沒有表,建立新表(更新表結構)
- 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與資料庫的連結物件,不是執行緒安全的。他是與資料庫互動橋樑。
- session.save( ); 儲存操作
- session.get( ); session.load( ); 都是查詢操作,load是延時查詢;get是立即查詢
- session.update( ); 更新操作
- session.delete( ); 刪除操作
(4)Transaction: Hibernate中管理事務的物件。
- transaction transaction=session.beginTransaction( ); 手動開啟事務
- transaction.commit( ); 提交事務
- 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
---------謝謝您的閱讀!加油! ----------知飛翀