1.建立Hibernate的設定檔hibernate.cfg.xml
2.建立持久化類
3.建立對象-關係對應檔
4.通過Hibernate API編寫訪問資料庫的代碼 第一步建立設定檔:
首先我是使用hibernate tools工具輔助建立的,不知道怎麼安裝的請參考我之前的部落格:
選中檔案src右鍵 new->other
入門課程按照預設的一直next就行了
這樣會自動產生一個hibernate.cfg.xml檔案
開啟檔案
填寫配置:(設定檔代碼網上很多,建議去官網開發文檔中找。複製粘貼後,改一下資料庫驅動,帳號密碼等配置就行了)
<property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property><property name="connection.username">root</property><property name="connection.password">123456</property><!-- JDBC connection pool (use the built-in) --><!-- <property name="connection.pool_size">1</property> --><!-- SQL dialect --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- Echo all executed SQL to stdout --><property name="show_sql">true</property><!-- Enable Hibernate's automatic session context management --><!--<property name="current_session_context_class">thread</property> --><!-- Drop and re-create the database schema on startup --><property name="hbm2ddl.auto">create</property>
上面的資料庫連接可以有多種寫法下面這兩種寫法也正確:後面的hibernate是建立的資料庫的名字
//略去連接埠號碼但是/不能略,所以是三個//。因為mysql的預設連接埠號碼是3306.都知道。除非你更改了連接埠號碼 才必須寫明連接埠號碼
<property name="connection.url">jdbc:mysql:///hibernate</property>
第三種寫法是:在後面加上字元編碼,更國際化防止中文亂碼
jdbc:mysql:///hibernate?useUnicode=true&characterEncoding=UTF-8
或者
jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8
注意:
這裡我用的是mysql資料庫,如果是其它資料庫,請自行百度或去官網尋找
1:在hibernate設定檔中方言配置“org.hibernate.dialect.MySQLDialect”中的MYSQL那個y要小寫。
2:Junit的版本要是4.5會報錯,換成4.7就好了
3:如果資料庫是本地,hibernate設定檔中的地址這樣配置:jdbc:mysql://localhost/hibernate或如上面提到的三種方式中的一種
第二步建立持久化類
持久化類要遵循JavaBean的規範:
⑴ JavaBean 必須放在一個單獨的包中
⑵ JavaBean 必須申明為 public class 即:必須是公有的類
⑶ JavaBean 的所有屬性必須申明為 private 即:屬性必須私人
⑷ 通過 setter 方法和 getter 方法設值和取值
⑸ 必須有一個公有無參構造方法
⑹ 編寫代碼要嚴格遵守 Java 程式的命名規範
例如我建立了一個學生類的持久化類:
package hibernate_001;import java.util.Date;public class Student {private int id;// 學號private String name;// 姓名private Date birthday;// 出生日期private String address;// 家庭住址public Student() {}public Student(int id, String name, Date birthday, String address) {// super();this.id = id;this.name = name;this.birthday = birthday;this.address = address;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ", birthday=" + birthday + ", address=" + address + "]";}}
第三步:建立關係對應檔和資料庫:
建立關係對應檔:(建立方法同第一步)如下 new-other-Hibernate-Hibernate XML Mapping file(hbm.xml) 然後一直next就行了
點next
之後操作如下:選擇對應的持久化類然後next
注意這裡點擊next之後如果出現如下提示:(沒有這項錯誤的請跳過)
Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
請做如下操作:
這種錯誤一般有3個原因
1.jdbc驅動包版本問題或錯誤
2.資料庫配置不正確或服務未啟動
3.hibernate 配置問題
不過一般查錯 按照 3 2 1的順序來
我的問題是資料庫未啟動:(資料庫預設是開機自啟動的,我之前把自啟動關閉了,所以需要手動啟動一下)
開啟:工作管理員->服務
右鍵選擇啟動就行了
但是啟動了還是不行,我接著接著hibernate配置問題。
弄啦半天還是不行。推測是版本不匹配的問題:我降低了eclipse的版本
換成了:Version: Luna Service Release 2 (4.4.2)之前是最高的4.6的oxygen那個
注意eclipse降低版本後,hibernate tools 也要降低到與eclipse對應的版本
即:重新安裝配置hibernate tools工具:之前已經講過了,忘記的請回到hibernate 入門教程第二課第三課
同時我又降低了匯入的hibernate jar包的版本現在使用的是4.2.4
現在問題解決了(看來以後用軟體還是不要用最新的,各種問題版本不匹配。開發專案提案用稍微老一點的穩點版本)
下面接著講:如下圖是工具自動幫我們產生的對象關係映射的文檔,如果沒有這個工具,我們只能自己寫,而且一不小心寫錯個字母也不好檢查。是不是很方便。
映射文檔把我們的實體類Student映射為資料庫中的一張表,屬性對應為表中的欄位
注意:下面紅框裡面的類是我們剛才建立的實體類,預設產生的不會有錯,因為我們建立的實體類在預設的包中。如果後來想把實體類的路徑該了,比如後來放到了com.edu.model包中:紅框中就該改寫為com.edu.model.Student。如果不改的話會找不到實體類
映射文檔產生後需要加到配置文檔hibernate.cfg.xml中 如下圖所示
注意:這裡因為Student.hbm.xml的路徑因為在預設的包中所以全路徑就是Student.hbm.xml,
如果持久化類在其它自訂的包中寫全路徑名就應該這樣寫:
例如Student.hbm.xml在com.edu.model包中需要這樣寫
<mapping resource="com/edu/model/Student.hbm.xml" />
建立資料庫:注意編碼規則,選擇utf-8避免出現中文亂碼問題