1. 程式人生 > >Hibernate入門基礎

Hibernate入門基礎

**Hibernate框架的概述**

1. Hibernate框架的概述
* Hibernate是一個開放原始碼的物件關係對映(ORM)框架,它對JDBC進行了非常輕量級的物件封裝,使得Java程式設計師可以隨心所欲的使用物件程式設計思維來操縱資料庫。 
* Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程式使用,也可以在Servlet/JSP的Web應用中使用。
* Hibernate是輕量級JavaEE應用的持久層解決方案,是一個關係資料庫ORM框架

2. Hibernate是一個持久層的ORM框架!


**什麼是ORM(物件關係對映)**

1. ORM對映:Object Relational Mapping
* O:面向物件領域的Object(JavaBean物件)
* R:關係資料庫領域的Relational(表的結構)
* M:對映Mapping(XML的配置檔案)
2. 簡單一句話:Hibernate使程式設計師通過操作物件的方式來操作資料庫表記錄


**Hibernate優點**

1. 優點
* Hibernate對JDBC訪問資料庫的程式碼做了封裝,大大簡化了資料訪問層繁瑣的重複性程式碼
* Hibernate是一個基於jdbc的主流持久化框架,是一個優秀的orm實現,它很大程度的簡化了dao層編碼工作
* Hibernate的效能非常好,因為它是一個輕量級框架。對映的靈活性很出色。它支援很多關係型資料庫,從一對一到多對多的各種複雜關係



Hibernate框架的快速入門

這裡拿我寫的一個客戶關係管理系統作為例子

**第一步:下載Hibernate5的執行環境**

1. 下載相應的jar包等
 http://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/hibernate-release-5.0.7.Final.zip/download

2. 解壓後對目錄結構可以自己去了解,這裡不再贅述



**第二步:建立表結構**

1. 建表語句如下
Create database hibernate;
Use hibernate_day01;
CREATE TABLE `cst_customer` (

 `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客戶編號(主鍵)',
 `cust_name` varchar(32) NOT NULL COMMENT '客戶名稱(公司名稱)',
 `cust_user_id` bigint(32) DEFAULT NULL COMMENT '負責人id',
 `cust_create_id` bigint(32) DEFAULT NULL COMMENT '建立人id',
 `cust_source` varchar(32) DEFAULT NULL COMMENT '客戶資訊來源',
 `cust_industry` varchar(32) DEFAULT NULL COMMENT '客戶所屬行業',
 `cust_level` varchar(32) DEFAULT NULL COMMENT '客戶級別',
 `cust_linkman` varchar(64) 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=94 DEFAULT CHARSET=utf8;


----------


**第三步:搭建Hibernate的開發環境**

1. 建立WEB工程,引入Hibernate開發所需要的jar包
* MySQL的驅動jar包
* Hibernate開發需要的jar包(資料/hibernate-release-5.0.7.Final/lib/required/所有jar包)
* 日誌jar包(資料/jar包/log4j/所有jar包)

----------

**第四步:編寫JavaBean實體類**

1. Customer類的程式碼如下:
----------


**第五步:建立類與表結構的對映**

1. 在JavaBean所在的包下建立對映的配置檔案
* 預設的命名規則為:實體類名.hbm.xml
* 在xml配置檔案中引入約束(引入的是hibernate3.0的dtd約束,不要引入4的約束)
<!DOCTYPE hibernate-mapping PUBLIC 
   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

2. 如果不能上網,編寫配置檔案是沒有提示的,需要自己來配置
* 先複製http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd --> window --> preferences --> 搜尋xml --> 選擇xml catalog --> 點選add --> 現在URI --> 貼上複製的地址 --> 選擇location,選擇本地的DTD的路徑

3. 編寫對映的配置檔案

<?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.itheima.domain.Customer" table="cst_customer">
		<!-- 配置id 
			見到name屬性,JavaBean的屬性
			見到column屬性,是表結構的欄位
		-->
		<id name="cust_id" column="cust_id">
			<!-- 主鍵的生成策略 -->
			<generator class="native"/>
		</id>
		
		<!-- 配置其他的屬性 -->
		<property name="cust_name" column="cust_name"/>
		<property name="cust_user_id" column="cust_user_id"/>
		<property name="cust_create_id" column="cust_create_id"/>
		<property name="cust_source" column="cust_source"/>
		<property name="cust_industry" column="cust_industry"/>
		<property name="cust_level" column="cust_level"/>
		<property name="cust_linkman" column="cust_linkman"/>
		<property name="cust_phone" column="cust_phone"/>
		<property name="cust_mobile" column="cust_mobile"/>
		
	</class>
	
</hibernate-mapping>    

---------

**第六步:編寫Hibernate核心的配置檔案**

1. 在src目錄下,建立名稱為hibernate.cfg.xml的配置檔案
2. 在XML中引入DTD約束
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

3. 開啟:資料/hibernate-release-5.0.7.Final/project/etc/hibernate.properties,可以檢視具體的配置資訊
* 必須配置的4大引數
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///test
#hibernate.connection.username gavin
#hibernate.connection.password

* 資料庫的方言(必須配置的)
#hibernate.dialect org.hibernate.dialect.MySQLDialect

* 可選的配置
#hibernate.show_sql true    //控制檯列印sql語句
#hibernate.format_sql true  //格式化sql預計
#hibernate.hbm2ddl.auto update  //操作資料庫時,若表不存在,則建立表;若表存在,則正常操作;若要增加表中新的欄位,則會增加新的欄位且不改變表結構。


* 引入對映配置檔案(一定要注意,要引入對映檔案,框架需要載入對映檔案)
* <mapping resource="com/itheima/domain/Customer.hbm.xml"/>

4. 具體的配置如下

<?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">root</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
				
		<mapping resource="com/itheima/domain/Customer.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

----------

**第七步:編寫Hibernate入門程式碼**
1. 具體的程式碼如下