1. 程式人生 > >一、Hibernate快速入門

一、Hibernate快速入門

概述

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

什麼是ORM

ORM對映:Object Relational Mapping(物件關係對映)

  • O:面向物件領域的Object(JavaBean物件)
  • R:關係資料庫領域的Relational(表的結構)
  • M:對映Mapping(XML的配置檔案)

簡單一句話:Hibernate使程式設計師通過操作物件的方式來操作資料庫表記錄

Hibernate優點

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

Hibernate框架的快速入門

一、下載Hibernate5的執行環境

  1. 下載相應的jar包等

    下載地址

  2. 解壓後對目錄結構有一定的瞭解

在這裡插入圖片描述

二、建立表結構

以建立客戶資訊表為例

Create database hibernate_day01;
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的開發環境

建立WEB工程,引入Hibernate開發所需要的jar包

  1. MySQL的驅動jar包
    在這裡插入圖片描述
  2. Hibernate開發必需要有的jar包(路徑在hibernate-release-5.0.7.Final/lib/required/所有jar包)
    在這裡插入圖片描述
  3. 日誌jar包(log4j相關的jar包)
    在這裡插入圖片描述

以上jar包全部匯入後,一共有13個jar包
在這裡插入圖片描述

四、編寫JavaBean實體類

Customer類的程式碼如下:

public class Customer {
	// 建議所有的基本資料型別都使用其包裝型別,欄位名建議和資料庫表中的欄位名保持一致
	private Long cust_id;
	private String cust_name;
	private Long cust_user_id;
	private Long cust_create_id;
	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方法
}

五、建立類與表結構的對映

1.在JavaBean所在的包下建立對映的配置檔案

a.預設的命名規則為:實體類名.hbm.xml
b.在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">

該約束頭的宣告描述也可以在eclipse工具中的web專案中依賴hibernate庫中檢視:
	web工程
		->Web App Libraries 
			->hibernate-core-5.0.7.Final.jar
				->org.hibernate
					->hibernate-mapping-3.0.dtd
						->第10~12行的內容就是約束的描述

完成上述操作後如下圖所示:
在這裡插入圖片描述
2. 如果不能上網,編寫配置檔案是沒有提示的,需要自己來配置
先複製http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd --> window --> preferences --> 搜尋xml --> 選擇xml catalog --> 選擇User Specified Entires -->點選add --> Key type選擇URI --> 在key的位置貼上複製的地址 --> 選擇location,選擇本地的DTD的路徑(前提得實現下載好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="blog.csdn.net.mchenys.domain.Customer" table="cst_customer">
		
		<!-- 配置類屬性和表結構欄位的對映
			 name屬性:JavaBean的屬性 
			 column屬性:表結構的欄位 
		-->
	
		<!--配置主鍵屬性  -->
		<id name="cust_id" column="cust_id">
			<!-- 主鍵的生成策略 native表示由hibernate維護-->
			<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.建立hibernate配置檔案

a. 在src目錄下,建立名稱為hibernate.cfg.xml的配置檔案
b. 在XML中引入DTD約束
	<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
		
該約束頭的宣告描述也可以在eclipse工具中的web專案中依賴hibernate庫中檢視:
	web工程
		->Web App Libraries 
			->hibernate-core-5.0.7.Final.jar
				->org.hibernate
					->hibernate-configuration-3.0.dtd
						->第10~12行的內容就是約束的描述

完成上述操作後,如下圖所示:
在這裡插入圖片描述
2.如果不能上網,編寫配置檔案是沒有提示的,需要自己來配置(參考上面配置對映檔案的操作)
3.編寫hibernate的配置檔案
具體屬性可參考hibernate解壓路徑下的hibernate-release-5.0.7.Final/project/etc/hibernate.properties檔案內容,找到mysql的配置資訊
在這裡插入圖片描述
開啟後,瀏覽到第56行,可以看到mysql的基本配置
在這裡插入圖片描述

必須配置的4大引數					
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///test
#hibernate.connection.username gavin
#hibernate.connection.password

必須配置的資料庫的方言(標明使用的是mysql資料庫)
#hibernate.dialect org.hibernate.dialect.MySQLDialect

最後還需要引入對映的配置檔案路徑

下面是一個最基本的hibernate配置檔案

<?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>

	<!-- 記住:先配置SessionFactory標籤,一個數據庫對應一個SessionFactory標籤 -->
	<session-factory>

		<!-- 必須要配置的引數有5個,4大引數和資料庫的方言 -->
		<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">1234</property>

		<!-- 資料庫的方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

		<!-- 對映配置檔案,需要引入對映的配置檔案 -->
		<mapping resource="blog/csdn/net/mchenys/domain/Customer.hbm.xml" />

	</session-factory>

</hibernate-configuration>	

七、編寫Hibernate測試程式碼

package blog.csdn.net.mchenys.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import blog.csdn.net.mchenys.domain.Customer;

public class Demo {
	/**
	 * 測試儲存客戶
	 */
	@Test
	public void testSave(){
		/**
		 * 	1. 先載入配置檔案
		 * 	2. 建立SessionFactory物件,生成Session物件
		 *  3. 建立session物件
		 *  4. 開啟事務
		 *  5. 編寫儲存的程式碼
		 *  6. 提交事務
		 *  7. 釋放資源
		 */
		/*// 1. 先載入配置檔案
		Configuration config = new Configuration();
		// 預設載入src目錄下hibernate.cfg.xml的配置檔案
		config.configure();
		// 瞭解,手動載入
		// config.addResource("blog/csdn/net/mchenys/domain/Customer.hbm.xml");
		 */		
		
		// 簡寫的方法
		Configuration config = new Configuration().configure();
		
		// 2. 建立SessionFactory物件
		SessionFactory factory = config.buildSessionFactory();
		// 3. 建立session物件
		Session session = factory.openSession();
		// 4. 開啟事務
		Transaction tr = session.beginTransaction();
		
		// 5. 編寫儲存的程式碼
		Customer c = new Customer();
		// c.setCust_id(cust_id);	主鍵是自動遞增了,不需要新增
		c.setCust_name("測試3");
		c.setCust_level("2");
		c.setCust_phone("110");
		
		// 儲存資料,操作物件就相當於操作資料庫的表結構
		session.save(c);
		
		// 6. 提交事務
		tr.commit();
		// 7. 釋放資源
		session.close();
		factory.close();
	}
}

測試通過後
在這裡插入圖片描述
檢查資料庫是否有插入資料
在這裡插入圖片描述
若能看到資料則表示hibernate可以正常使用了。