Hibernate初體驗及簡單錯誤排除
Hibernate是什麼,有多少好處,想必查詢這類博文的都知道,所以就不多說了。下面是我對Hibernate簡單使用的一個小小的總結。與君(主要是剛入門的)共勉吧!
建立的順序
- 建立Hibernate的配置檔案
- 建立持久化的類
- 建立物件-關係的對映檔案
- 通過HibernateAPI編寫訪問資料庫的程式碼
關於詳細的步驟
匯入Hibernate必須的jar包(hibernate-release-版本號.Final\lib\required)
然後是匯入MySQL的jdbc的驅動(mysql-connector-java-版本號-bin.jar)
匯入Junit4的jar包(junit4-版本號.jar)
Eclipse上進行環境的搭建
這裡僅僅是將上面提到的那些必須的jar包進行相關的路徑的配置。我這裡是將Hibernate基礎專案所需的jar包建立了一個自己的userlibrary。這樣方便以後自己隨意的匯入。但是應該注意的是今後那些以來的檔案的文職千萬不要隨意的變動了,否則可能會使得eclipse找不到。還有Mysql的JDBC的jar千萬不要忘記了。另外Junit作為一個除錯的使用也是必不可少的。
建立配置檔案
步驟一:當Hibernate-tools 沒有自動生成配置檔案必須的dtd文件的時候,我們需要手動的進行新增。比如
hibernate-release-4.2.4.Final\project\hibernate-core\src\main\resources\org\hibernate\hibernate-mapping-3.0.dtd
- 1
在專案的src目錄上點選滑鼠右鍵,然後使用hibernate外掛,點選Hibernate Configuration File(cfg.xml)即可。選擇預設的就可以了。
步驟二:建立Hibernate的配置檔案: 只要是連線過MySQL資料庫,都是知道這些個欄位的含義的,不再過多的敘述咯。
<property name="connection.username">root</property><property name="connection.password">mysql</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql:///hibernate?useUnicode=true&characterEncoding=UTF-8</property><property name="connection.dialect">org.hibernate.dialect.MySQLDialect</property>
- 1
- 2
- 3
- 4
- 5
建立持久化類
舉個簡單的小例子咯。如下: import java.util.Date; /** * 學生類,設計原則要遵循javaBean的設計原則 * * 1、共有的類 2、屬性私有 3、屬性使用setter和getter封裝 4、提供龔鷗的不帶引數的預設的構造方法 * * @author Administrator * */ public class Students { private String sname; private int sid; private Date birthday; private String gender; private String adress; public Students() { } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getAdress() { return adress; } public void setAdress(String adress) { this.adress = adress; } public Students(String sname, int sid, Date birthday, String gender, String adress) { this.sname = sname; this.sid = sid; this.birthday = birthday; this.gender = gender; this.adress = adress; } @Override public String toString() { return "Students [sname=" + sname + ", sid=" + sid + ", birthday=" + birthday + ", gender=" + gender + ", adress=" + adress + "]"; } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
建立物件關係對映檔案
同樣使用外掛幫助我們生成。在src目錄下點選右鍵,new--others--hibernate,選擇Hibernate XML Mapping file(hbm.xml)檔案,找到我們要進行對映的學生類,然後選擇預設的即可。然後在剛才建立的hibernate.cfg.xml檔案中新增一個mapping標籤即可。如下 <mapping resource="Students.hbm.xml" />
- 1
- 2
- 3
- 4
建立自己的測試用的資料庫
這裡我使用Navacat軟體新建了一個字符集為UTF-8的資料庫。名稱為hibernate.
- 1
編寫的第一個Hibernate的測試的小例子
- 使用Junit進行測試: - @Test註解:表明這是一個測試方法,一般為void的無參的throws異常的方法。 - @Before註解:表明這是一個初始化方法,用於初始化一些資訊。 - @After註解:表明這是一個釋放資源的方法,用於收尾的工作。
- 1
- 2
- 3
- 4
點選專案名,右鍵選擇建立一個source folder.作為我們的測試所用。我的為test。然後新建一個測試類就可以了。這裡我們需要測試的是我們的Students類,所以建立了一個StudentsTest就行。
編寫最後的內容,使用HibernateAPI來操作資料庫
可見為如下程式碼:
import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test; public class StudentsTest { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init() { // 建立配置物件 Configuration config = new Configuration().configure(); // 建立服務註冊物件 ServiceRegistry serviceRegister = new ServiceRegistryBuilder().applySettings(config.getProperties()) .buildServiceRegistry(); // 建立會化工廠物件 sessionFactory = config.buildSessionFactory(serviceRegister); // 會話物件 session = sessionFactory.openSession(); // 開啟事務 transaction = session.beginTransaction(); } @Test public void testSaveStudents() { Students s = new Students(1, "張三", "男", new Date(), "DLUT"); // 儲存物件進入資料庫 session.save(s); } @After public void destory() { // 先提交事務 transaction.commit(); session.close(); sessionFactory.close(); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
檢驗一下,實施的效果吧
我最後在測試方法上點選了一下,發現報錯了。是org.hibernate.MappingException: Unknown Entity:Students
。 然後我就看了看hibernate.cfg.xml檔案,發現數據庫的一切都是正確的啊。也沒錯。 就想不明白了,然後查了查網上的相似的錯誤。也沒有發現正確的解決辦法,最後靈光一閃,肯定是對映檔案出錯了。那麼到底是哪個呢,就一個一個的排查吧。然後我就找到了錯誤的根源了,不是Student.hbm.xml的錯誤,而是hibernate.cfg.xml中忘記了新增mapping的標籤。哈哈。這次,又運行了一下,成功了。
效果圖如下:
總結
本文適合剛入門的Hibernate童鞋,所以並沒有一些很複雜的配置啊,和其他額外的處理啊什麼的。就是為了簡單。
這裡面使用到了Hibernate-tools外掛,幫助我們幹了不少活。省事也省心了。個人建議安裝JBoss的這款,包含了不少的東西呢。
好了,今天就講到這裡吧。第一篇Hibernate的博文,想必將來回頭來看,定有一番回憶 :-)