之前在寫關於安卓鬧鍾的教程,寫了一半就沒后一半了,其實自己也沒做好,在校外實習,校內畢業實習又有任務,只能先放放了,等畢業實習結束之后,在繼續安卓鬧鍾開發之旅,相信這個時間不會很久的。現在畢業實習用到的SSH框架(Struts+Spring+Hibernate),自己沒有多少時間去好好學習,但是還是想把學到的東西記錄下來。
一、Hibernate簡介
1、什么是Hibernate?
Hibernate是數據持久層的一個輕量級框架。數據持久層的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等。並且Hibernate是一個開源的orm(Object relations mapping)框架,提供了查詢獲取數據的方法,用面向對象的思想來操作數據庫,節省了我們開發處理數據的時間。
2、Hibernate的優點
1)、使用簡介的hql語句(Hibernate query language)。可以不使用傳統的insert,update等sql語句。比如insert一個對象,原來的做法是:insert into 表名稱 alue(值1,值2,值3,……),而現在的做法是:save(對象)。
2)、使用or映射。對象到關系數據庫之間的映射。是從對象的角度操作數據庫,再次體現了面向對象思想。原來的實體抽取方法:首先有了表,然后表映射實體對象。而現在Hibernate做法是:直接由對象映射到表。
3)、沒有侵入性,移植性比較好。什么是沒有侵入性?就是Hibernate采用了pojo對象。所謂的pojo對象就是沒有繼承Hibernate類或實現Hibernate接口。這樣的話,此類就是一個普通的java類,所以移植性比較好。
4)、支持透明持久化。透明是針對上層而言的。三層架構的理念是上層對下層的依賴,只是依賴接口不依賴具體實現。而Hibernate中的透明是指對業務邏輯層提供了一個接口session,而其他的都封裝隱藏。持久化是指把內存中的數據存放到磁盤上的文件中。
3、當然一個事物,不可能十全十美,即使如此優秀的Hibernate也有自己的弱點。比如:若是大量數據批量操作。則不適合使用Hibernate。並且一個持久化對象不能映射到多張表中。
4、Hibernate中5個核心接口
1)、Configuration接口:負責配置及啟動Hibernate,用來創建sessionFactory
2)、SessionFactory接口:一個SessionFactory對應一個數據源存儲,也就是一個數據庫對應一個SessionFactory。SessionFactory用來創建Session對象。並且SessionFactory是線程安全的,可以由多個線程訪問SessionFactory共享。
3)、Session接口:這個接口是Hibernate中常用的接口,主要用於對數據的操作(增刪改查)。而這個Session對象不是線程安全的。不能共享。
4)、Query接口:用於數據庫的查詢對象。
5)、Transaction接口:Hibernate事務接口。它封裝了底層的事務操作,比如JTA(;java transcation architecture)所有的數據操作,比如增刪改查都寫在事務中。
二、Hibernate環境搭建所需軟件
1、JDK:http://pan.baidu.com/s/1pJodjUN
2、Tomcat:http://pan.baidu.com/s/1c0jFOWg
3、MySQL:http://pan.baidu.com/s/1ntohpLR
4、MySQL JDBC數據庫驅動:http://pan.baidu.com/s/1q56yy
4、Nvicat:http://pan.baidu.com/s/1c0vRhnU
5、MyEclipse破解版:http://pan.baidu.com/s/12aNAA
6、Hibernate 3.6.10:http://pan.baidu.com/s/1jG1e8OA
7、slf4j 1.6.1:http://pan.baidu.com/s/1c0eqni4
三、Hibernate環境搭建
1、安裝JDK7(最新版好像已經到8了吧,反正我也沒用過,不管它),配置好Java環境變量
2、安裝Tomcat,Tomcat現階段還用不到,不過以后肯定會用到,先裝上,一路點下去就行,沒什么要注意的
3、安裝MySQL,設置用戶名、密碼時候注意下就行。MySQL數據查看推薦使用Nvicat。
4、安裝MySQL JDBC驅動,驅動的jar包一般在C:\Program Files (x86)\MySQL\MySQL Connector J下
4、MyEclipse的安裝。
四、第一個Hibernate小程序
創建一個Hello_World的Java項目,導入所需jar包(本機可以配置成User Librairies,方便使用),具體配置請見文章最后的源碼,此處不再綴訴。
在src目錄下,創建一個hibernate.cfg.xml的配置文件,文件配置設置可以參見hibernate的官方文檔。
1 <?xml version='1.0' encoding='utf-8'?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 5 6 <hibernate-configuration> 7 8 <session-factory> 9 10 <!-- 數據庫連接設置 --> 11 <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 12 <!-- Student為你的數據庫名稱 --> 13 <property name="connection.url">jdbc:mysql://localhost:3306/Student</property> 14 <property name="connection.username">root</property> 15 <property name="connection.password">1025263614</property> 16 17 <!-- JDBC connection pool (use the built-in) --> 18 <property name="connection.pool_size">1</property> 19 20 <!-- SQL方言 --> 21 <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 22 23 <!-- Enable Hibernate's automatic session context management --> 24 <property name="current_session_context_class">thread</property> 25 26 <!-- Disable the second-level cache --> 27 <property name="cache.provider_class"> 28 org.hibernate.cache.NoCacheProvider 29 </property> 30 31 <!-- 顯示SQL語句 --> 32 <property name="show_sql">true</property> 33 <!-- 格式化輸出SQL語句 --> 34 <property name="format_sql">true</property> 35 36 <!-- validate 加載hibernate時,驗證創建數據庫表結構 --> 37 <!-- create 每次加載hibernate,重新創建數據庫表結構,這就是導致數據庫表數據丟失的原因。 --> 38 <!-- create-drop 加載hibernate時創建,退出是刪除表結構 --> 39 <!-- update 加載hibernate自動更新數據庫結構 --> 40 <property name="hbm2ddl.auto">create</property> 41 <property name="myeclipse.connection.profile"></property> 42 43 <!-- hibernate與數據庫的對象關系映射文件**.hbm.xml --> 44 <mapping resource="com/lsj/hibernate/model/Student.hbm.xml" /> 45 <!-- 使用annotion注解時,hibernate與數據庫對象關系映射表示 --> 46 <!-- 推薦使用annotion注解來表示映射關系 --> 47 <mapping class="com.lsj.hibernate.model.Teacher" /> 48 </session-factory> 49 50 </hibernate-configuration>
創建一個Teacher的實體類,這里用的是annotion注解,還有一種方法是創建XXX.hbm.xml的關系映射文件,具體實現請參見附件的源碼
1 package com.lsj.hibernate.model; 2 3 import javax.persistence.Entity; 4 import javax.persistence.Id; 5 import javax.persistence.Table; 6 7 //Entity是javax.persistence.Entity包中的 8 @Entity 9 // 映射的表名 10 @Table(name = "teacher") 11 public class Teacher { 12 13 private int id; 14 private int age; 15 private String name; 16 private String title; 17 18 // 主鍵,一般寫在get方法中,而不是在定義中 19 @Id 20 public int getId() { 21 return id; 22 } 23 24 public void setId(int id) { 25 this.id = id; 26 } 27 28 public int getAge() { 29 return age; 30 } 31 32 public void setAge(int age) { 33 this.age = age; 34 } 35 36 public String getName() { 37 return name; 38 } 39 40 public void setName(String name) { 41 this.name = name; 42 } 43 44 public String getTitle() { 45 return title; 46 } 47 48 public void setTitle(String title) { 49 this.title = title; 50 } 51 }
創建一個TeacherTest的測試類
1 package com.lsj.hibernate.test; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.cfg.Configuration; 6 7 import com.lsj.hibernate.model.Teacher; 8 9 public class TeacherTest { 10 11 public static void main(String[] args) { 12 Teacher t = new Teacher(); 13 t.setAge(30); 14 t.setName("小傑"); 15 t.setTitle("背包客"); 16 17 Configuration cfg = new Configuration(); 18 // 讀取hibernate.cfg.xml中的配置 19 cfg.configure(); 20 // 獲取SessionFactory 21 SessionFactory sf = cfg.buildSessionFactory(); 22 // 獲取Session 23 Session session = sf.openSession(); 24 // 開啟事務 25 session.beginTransaction(); 26 // 保存 27 session.save(t); 28 // 提交事務 29 session.getTransaction().commit(); 30 // 關閉連接 31 session.close(); 32 sf.close(); 33 } 34 }
嗯,這樣一個簡單的Hibernate程序就寫完,運行的時候記得打開MySQL的服務,哈哈!
作者:登天路
轉載請說明出處:http://www.cnblogs.com/travellife/
源碼下載:百度雲盤
Hibernate 3.2參考文檔:百度雲盤