1. 程式人生 > >Hibernate框架介紹01

Hibernate框架介紹01

  1. Hibernate框架是什麼

 Hibernate的好處?

操作資料庫的時候,可以以面向物件的方式來完成,不需要書寫sql語句。

Hibernate是一款ORM框架

 

  1. Hibernate框架的搭建步驟:

  • 導包
  • 建立資料庫,準備表,實體
  • 書寫ORM元資料(物件與表的對映配置檔案)
  • 書寫主配置檔案
  • 書寫程式碼測試

Hibernate API 詳解:

書寫ORM元資料(物件與表的對映配置檔案)Customer.hbm.xml,如下圖:

<?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 package="com.cn.domain">
 <!-- 
      class元素:配置實體與表的對應關係的
      name:完整類名
      table:資料庫表名
  -->
  <class name= "Customer" table = "cst_customer">
       <id name= "cust_id">
       <!-- 主鍵生成策略 -->
       <generator class="native"></generator>
       </id>
       
       
       <!-- property元素:除id之外的普通屬性對映 
       name: 填寫屬性名
				column(可選): 填寫列名
				type(可選):填寫列(屬性)的型別.hibernate會自動檢測實體的屬性型別.
						每個型別有三種填法: java型別|hibernate型別|資料庫型別
				not-null(可選):配置該屬性(列)是否不能為空. 預設值:false
				length(可選):配置資料庫中列的長度. 預設值:使用資料庫型別的最大長度
       -->
  <property name="cust_name" column="cus_name"></property>
  <property name="cust_source" column="cus_source"></property>
  <property name="cust_level" column= "cus_level"></property>
  <property name= "cust_linkman" column= "cust_link"></property>
  </class>
 </hibernate-mapping>   

 

書寫主配置檔案hibernate.cfg.xml,如下圖:

<?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.connnection.driver_class">com.mysql.jdbc.Driver</property>
   <!-- url -->
    <property name="hibernate.connection.url">jdbc:mysql:///hibernate_32</property>
   <!-- 資料庫連線使用者名稱 -->
   <property name="hibernate.connection.username">root</property>
   <!-- 資料庫連線密碼 -->
   <property name="hibernate.connection.password">1234</property>
   
   <!-- 資料庫方言
      不同的資料庫中,sql語法略有區別,指定方言可以讓hibernate框架在生成sql語句時,針對資料庫的方言生成。
  -->    
 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
   <!-- 將hibernate生成的sql語句列印到控制檯 -->
<property name = "hibernate.show_sql">true</property>    
   <!--將hibernate生成的sql語句格式化(語法縮排) -->
   <property name="hhibernate.format_sql">true</property>
   		<!-- 
		## auto schema export  自動匯出表結構. 自動建表
		#hibernate.hbm2ddl.auto create		自動建表.每次框架執行都會建立新的表.以前表將會被覆蓋,表資料會丟失.(開發環境中測試使用)
		#hibernate.hbm2ddl.auto create-drop 自動建表.每次框架執行結束都會將所有表刪除.(開發環境中測試使用)
		#hibernate.hbm2ddl.auto update(推薦使用) 自動生成表.如果已經存在不會再生成.如果表有變動.自動更新表(不會刪除任何資料).
		#hibernate.hbm2ddl.auto validate	校驗.不自動生成表.每次啟動會校驗資料庫中表是否正確.校驗失敗.
		 -->
   <property name="hibernate.hbm2ddl.auto">update</property>
  <!-- 核心配置檔案中關聯對映檔案 -->
  <!-- 引用orm元資料
       路徑書寫:填寫src下的路徑
   -->
<mapping resource="/com/cn/domain/Customer.hbm.xml"/>

  
  
   </session-factory>



</hibernate-configuration>



測試檔案Demo.java,如下圖:

package com.cn.Test;

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

import com.cn.domain.Customer;
/*學習SessionFactory
 * SessionFactory功能:用於建立操作資料庫核心物件session物件的工廠
 *                   簡單說功能就一個----建立session物件
 * 注意:1.sessionfactory負責儲存和使用所有的配置資訊,消耗記憶體資源非常大
 * 2.sessionFacory屬於執行緒安全的物件設計
 * 
 * 
 * 學習session物件功能
 *表達hibernate框架與資料庫之間的連線(會話),session類似於JDBC年代的connection物件,
 *還可以完成對資料庫中資料的增刪改查操作。
 *session是hibernate操作資料庫的核心物件。
 * 
 * 
 * transaction物件
 * 封裝了事務的操作
 * 開啟事務
 * 提交事務
 * 回滾事務
 */
public class Demo {
	@Test
	public void fun1(){
		//1.建立,呼叫空參構造
		//2.讀取指定主配置檔案=>空參加載方法,載入src下的Hibernate.cfg
		Configuration conf = new Configuration().configure();
	    //3.根據配置資訊,建立Sessionfactory物件
		SessionFactory sessionFactory = conf.buildSessionFactory();
		//4.獲取session
		Session openSession = sessionFactory.openSession();
		//5.開啟事務並獲得操作事務的tx物件
		Transaction tx = openSession.beginTransaction();
		//----------------------------------
		Customer c = new Customer();
		c.setCust_name("google公司");
		openSession.save(c);//執行儲存
		//--------------------------------------
		tx.commit();//提交事務
		openSession.close();
		sessionFactory.close();
		//openSession.get(arg0, arg1);

	}

}

補充:Hibernate框架中如何新增約束:

1.Window-preference-搜尋catalog-Add  ,如下圖:

1.

2.Location 中選擇要匯入的約束(以map為例)

key type:選擇uri

key:http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd