在上一篇的部落格中,為了整明白實驗室項目的架構,我簡單的闡述了springmvc的一些配置內容以及一個小執行個體。但是在學習的過程中,又碰到了另外一個架構hibernate。hibernate是一個對資料庫操作進行封裝的輕量級架構,有了它我們不需要再去寫繁雜重複的JDBC語句,也不在需要和SQL語句打交道,給我們開發帶來很大的方便。
在這篇博文中,我打算把Hibernate單獨拉出來做一個簡單的應用。這樣我們可以再執行個體的基礎上去擴充延伸我們對Hibernate的理解。廢話不多說,先看一下我們的工程結構:
對應的hibernate的jar包,有需要的點擊下載。
先從我們的設定檔講起。hibernate.cfg.xml:
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <!-- 1.SessionFactory是Hibernate中的一個類, 這個類主要負責儲存HIbernate的配置資訊,以及對Session的操作--> <session-factory > <!-- 2.設定資料庫的驅動程式,Hibernate在串連資料庫時,需要用到資料庫的驅動程式--> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 3.設定資料庫的串連url:jdbc:mysql://localhost/test,其localhost表示mysql伺服器名稱,此處為本機,test是資料庫名--> <property name="hibernate.connection.url">jdbc:mysql://localhost/test?characterEncoding=UTF-8</property> <!-- 4.串連資料庫的使用者名稱,密碼--> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123456</property> <!-- 5.hibernate.dialect是Hibernate使用的資料庫方言.因為hibernate是要把Java對象轉換成關聯式資料庫來描述的,而關聯式資料庫雖然有一些統一的標準,如SQL-92等, 但是實際上各資料庫如Oracle, MySQL, MS SQL Server等等為了提高效能或增加功能都提供了一些額外的標準或文法,因此,hibernate為了更好適配各種關聯式資料庫,針對每種資料庫都指定了一個方言dialect。因為我的資料庫是MySQL,所以用的是MySQL的方言--> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 6.是否在後台顯示Hibernate用到的SQL語句,開發時設定為true,便於查錯,程式運行時可以在Eclipse的控制台顯示Hibernate的執行Sql語句--> <property name="hibernate.show_sql">true</property> <!-- 7.Hibernate在輸出sql語句的時候格式化一下,不然在控制台輸出的時候是一行 很難看 --> <property name="hibernate.format_sql">true</property> <!-- 8.這個就是我們要指定映射設定檔了 --> <mapping resource="com//hibernate/test/User.hbm.xml"/> </session-factory></hibernate-configuration>
然後再看User.hbm.xml:
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping> <!-- 1.name這裡填寫你的實體類的位置 table表示的是你操作的表名--> <class name="com.hibernate.test.User" table="User_jtx"> <!-- 2. <id>元素中的<generator>用來為該持久化類的執行個體產生唯一的標識 uuid表示我們產生的id是通過一定的演算法保證id的唯一性 --> <id name="id"> <generator class="uuid"/> </id> <!-- 3.注意這裡的name上的值 id,name,password 在你的User類中一定要有對應的變數,不然會報錯。 colume是指name對應的參數名在資料庫中產生的欄位,好比如我這裡的name的值是name,column是nameTest,那麼在產生表的時候就會是nameTest欄位,如果不設定column的參數那麼欄位就是預設的name對應的值。如name=password,對應的表中的欄位就是password --> <property name="name" column="nameTest"/> <property name="password"/> </class></hibernate-mapping>
接著看一下我們的實體類
User.java:
package com.hibernate.test;/*很簡單一個實體類。 注意的一點是:這裡的變數在User.hbm.xml中設定的變數要對應起來*/public class User { private String id; private String name; private String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
到這裡設定檔和實體類都已經部署好,下面我們測試一下。先把表產生。
ExportDB.java:
package com.hibernate.test;import org.hibernate.cfg.Configuration;import org.hibernate.tool.hbm2ddl.SchemaExport;public class ExportDB { public static void main(String[] args) { /*預設讀取hibernate.cfg.xml檔案。如果要自訂檔案也可以這樣寫configuration.configure("/XXX/XXX/hibernate.cfg.xml");*/ Configuration cfg = new Configuration().configure(); SchemaExport export = new SchemaExport(cfg); // 第一個true 在控制台列印sql語句,true 匯入sql語句到資料庫,即可執行 export.create(true, true); }}
運行完這個程式會在eclipse控制台上輸出:
在看資料庫User_jtx這個表被產生了。
表已經產生了,我們再往這個表上添加一點資料,Client.java:
package com.hibernate.test;import java.util.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class Client { public static void main(String[] args) { //讀取hibernate.cfg.xml檔案 Configuration cfg = new Configuration().configure(); //建立SessionFactory SessionFactory factory = cfg.buildSessionFactory(); //取得session Session session = null; try { session = factory.openSession(); //開啟事務 session.beginTransaction(); User user = new User(); user.setName("李四"); //儲存User對象 session.save(user); //提交事務 session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); //復原事務 session.getTransaction().rollback(); }finally { if (session != null) { if (session.isOpen()) { //關閉session session.close(); } } } }}
在控制台上輸出:
再看資料庫資料添加成功。
至此hibernate的執行個體已經全部說明,在項目中springmvc和hibernate經常被整合起來一起使用,實驗室的項目也是這樣做,我單獨的將兩塊架構拉出來簡單的學習一下,在該基礎上去延伸我對這兩個架構的認識。希望後面的學習可以把兩個架構整合到一起。有錯誤的地方希望各位大神指出批評。