1. 程式人生 > >初步瞭解Hibernate(第一篇)

初步瞭解Hibernate(第一篇)

      這是我第一次寫部落格,作為一直萌新先談談我的感想,之前接觸部落格的時候感覺沒必要自己寫出來,後來學了的東西有時候忘的差不多,然後自己在找的時候又下了不少功夫挺浪費時間,最主要的是之前不太會操作,有點嫌麻煩qaq,emmmmm。這裡記錄我的程式設計學習歷程,以供以後參閱。

      hibernate是一個持久層的框架技術,簡單來說就是做了物件和關係的自動轉換現在常用的持久層技術:

1)通過會話bean和實體bean來實現資料持久化(EJB

業務層---會話bean---實體

bean--資料庫

優點:穩定

缺點:重量級,記憶體消耗很大

2)通過jdbcdao來實現資料持久化(之前用的)

業務層---dao---jdbc--資料庫

優點:記憶體消耗最小

缺點:簡單,重複,耗時,各個資料庫sql不太一樣

3)通過daoorm元件來實現資料持久化(hibernate

業務層---dao--orm--資料庫

優點:記憶體消耗一般

缺點:還要學習該框架

1,搭建hibernate框架

1)新增jar

暫時用的是hibernate3.jar自行選擇

slf4j-api-1.6.1.jar(是介面標準)

slf4j-nop-1.6.1.jar(實現包)

2src下新增配置檔案hibernate.cfg.xml,個人設定自行修改(資料hibernate-distribution-3.6.10.Final\project\etc下有模版)

<!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://localhost/hhh</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		<!-- 資料庫連線池配置 -->
		<property name="hibernate.c3p0.max_size">20</property>
		<property name="hibernate.c3p0.min_size">1</property>
		<property name="hibernate.c3p0.timeout">5000</property>
		<property name="hibernate.c3p0.max_statements">100</property>
		<property name="hibernate.c3p0.idle_test_period">3000</property>
		<property name="hibernate.c3p0.acquire_increment">2</property>
		<property name="hibernate.c3p0.validate">true</property>
		<!-- 資料庫方言,hibernate-distribution-3.6.10.Final\project\etc\下的hibernate.properties檔案中有 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<!-- 是否需要根據配置自動生成資料表 -->
		<property name="hbm2ddl.auto">update</property>
		<!-- 是否顯示傳送的sql語句 -->
		<property name="show_sql">true</property>
		<!-- 是否sql格式化後輸出 -->
		<property name="hibernate.format_sql">true</property>
			
		<!-- 需要hibernate管理的配置檔案 -->
		<mapping resource="entity/Customer.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

3)實體類對映(例)

public class Customer {
	private int id;
	private String name;
	private String info;
	private Date createTime;
}

4)提供實體類對映檔案,建議與類同名,如Customer.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<!-- 
	name,類的位置,table,對應的資料庫表
	 -->
	<class name="entity.Customer" table="t_Customer">
		<!-- 主鍵,物件/表的id配置,很重要
		mysql---increment
		oracle---sequence
		mssqlserver---identity
		uuid
		select,根據查詢生成主鍵
		 -->
	<id name="id">
			<!-- 主鍵聲稱策略 -->
	<generator class="increment"/>
		</id>
		<!-- 其他屬性
		column,重定義列名,預設與屬性名一致
		type,更改列型別,建議預設
		length,字串長度,建議預設
		 -->
	<property name="name"/>
	<property name="info"/>
	<property name="createTime"/>
	</class>
</hibernate-mapping>

5)將該實體類交給hibernate管理,在hibernate.cfg.xml中新增

<mapping resource="entity/Customer.hbm.xml"/>

6)測試

public class ExportDB {
	public static void main(String[] args) {
		//讀取配置檔案,configure()該方法預設讀取src下名為hibernate.cfg.xml
		Configuration cfg=new Configuration().configure();
		//將類導成表
		SchemaExport se=new SchemaExport(cfg);
		//引數,顯示一些指令碼等資訊,true即可
		se.create(true, true);
	}
}
這樣就可以把相應的表自動匯入資料庫了,雖然配置有點麻煩,但是一勞永逸。