Hibernate chapter1 認識Hibernate

<!--
	SSH三大框架之二:Hibernate框架!
	Goal:認識什麼是Hibernate框架,以及它的作用,還有就是如何使用它!
-->

一,簡單認識Hibernate:
	Hibernate框架的出現是爲了實現使用簡單的代碼實現複雜的數據查詢以及其他數據庫的操作,與Struts不同,這個側重於與數據庫的交互!
	
二,怎樣使用它:
	1.建立數據庫,在Hibernate使用該數據庫時配置相關信息!
	2.需要導入Hibernate類庫
	3.建立實體
	4.配置實體與數據庫表格的關係
	5.在Hibernage配置文件中導入實體的配置
	6.創建各種對象,並且使用它們!
	
	這裏省去前面兩步,從建立實體開始講解:
	
	a)實體的建立:
	//com.shu.model
	public class ProvinceInfo{
		private int pid;
		private String pname;
		//省略getter和setter沒寫
	}
	
	public class CityInfo{
		private int cid;
		private String cname;
		private int pid;
		//省略getter和setter沒寫
	}
	
	b)配置實體與數據庫表格之間的關係(建立一個xml文件,注:各個實體對應各個文件):
	
	文件命名規則:類型.hbm.xml
	CityInfo.hbm.xml&ProvinceInfo.hbm.xml
	寫入一個頭文件(位於Hibernate.core->hibernate3->org.habernate->habernate-mapping.dtd):
	<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
	//開始配置
	<!--配置的格式
		<hibernate-mapping>
			<class name="實體所在類" table="數據庫表格">
				<!--id爲主鍵列必須配這個-->
				<id name="實體中的id列" column="表中的ID列">
					<!--操作方式:native表示程序不干擾數據庫,該數據由數據操縱,identity,自增長-->
					<generator class="字段的控制方式"/>
				</id>
				<!--開始配置各個字段和屬性了,如果兩邊的名稱都一樣的話,只寫name就可以了,但是推薦是兩個都寫-->
				<property name="字段屬性名" column="表格中的列名"/>
				<property name="字段屬性名" column="表格中的列名"/>
				.....
			</class>
		</hibernate-mapping>
	-->
	
	//代碼示範:
	<hibernate-mapping>
		<class name="com.shu.model.CityInfo" table="CITY">
			<id name="cid" column="cid">
				<generator class="native"/>
			</id>
			<property name="cname" column="cname"/>
			<property name="pid" column="pid"/>
		</class>
	</hibernate-mapping>
	
	c)在Hibernate配置文件中導入剛纔的實體與數據庫的配置文件:
	打開hibernate.cfg.xml,點擊configuration那一頁,找到mapping專欄,點擊add進行添加即可!
	
	d)創建對象,使用對象中的方法進行數據庫的各種操作:
	
	//1.首先要創建Configuration對象,並且千萬要記得同時配置文件!
	Configuration cfg=new Configuration().configure();
	
	//2.根據Configuration對象得到SessionFactory對象
	//這裏有個很好的記憶方法,Factory工廠是建設起來的,所以要build
	SessionFactory sf=cfg.buildSessionFactory();
	
	//3.在根據sessionFactory創建session對象
	Session session=sf.openSession();
	
	//4.在根據session對象創建Transaction對象
	Transaction trans=session.beginTransaction();
	
	//添加
		a)創建對象
			CityInfo ci=new CityInfo();
		b)賦值:
			ci.setCname("一個不會想起你的地方");
			ci.setPid(0);
		c)調用save方法把數據保存到數據庫
			session.save(ci);
	
	//刪除(自己測試了一下,不知道這個是這個樣子還是我代碼有誤,只有當實體的id列賦了值纔會根據那個ID進行數據刪除,否則沒用!)
		a)創建對象
			CityInfo ci=new CityInfo();
		b)賦值:
			ci.setCid(0);
		c)調用delete方法進行刪除
			session.delete(ci);
			
	//修改(這個是根據ID列來進行修改的~至少我的是這樣):
		a)創建對象
			CityInfo ci=new CityInfo();
		b)賦值:
			ci.setCid(1);
			ci.setCname("一個永遠都會記起你的地方");
			ci.setPid(2);
		c)調用修改的方法
			session.update(ci);
			
	//查詢(目前還就只知道根據ID進行查詢):
		//查詢22號城市的詳細信息
		CityInfo ci =(CityInfo)session.get(CityInfo.class,22);
	
	//最後不能忘記操作完畢後要提交事物,以及關閉session(我測試了一下,commit()並不會關閉session)
	//如果不commit()的話,你所做的對數據的增刪改都不會同步到數據庫!
	trans.commit();
	session.clear();
	session.close();
	
<!--
Author:Lovingshu's Forever
Date:2011-11-07 20:36
Remark:The harder you tried,the more you get!When I came back from my Hometown at The National's Day~
I changed!I'm not try hard ever~,not pay my attention on my study but games~I really be addicted in games those
time,I must change it~or my future will be dark as the time in high school!
By the way~tomorrow is [Call Of Duty 8:Modern warfare 3]'s pub day~and the birthday of mine~
--> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章