更新時間:2022-02-11 11:19:25 來源:動力節點 瀏覽938次
既然要使用Hibernate來開發應用,那么就必須先獲取Hibernate的發布包,我們可以從網站http://sourceforge.net/projects/hibernate/files/中下載自己需要的版本,我下載的是hibernate-search-4.4.0.Alpha2。
下載完成,解壓后得到以下內容:
創建一個Java Project,建好項目之后,需要添加上Hibernate運行所必須的Jar包,如果不知道哪些可以不添加就直接添加lib\required中的所有Jar包,如果清楚的知道每個包的作用就可以進行相應的刪減。
package events;
import java.util.Date;
public class Event {
private Long id;
private String title;
private Date date;
public Event() {
}
public Long getId() {
return id;
}
private void setId(Long id) {
this.id = id;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
注意:
(1)無參構造函數的作用是用于Hibernate通過反射機制來實例化類對象的時候。
(2)在所有的持久化實體類中都需要一個唯一的標識符屬性。
(3)通常不會操作對象的標識(identity),因此它的setter方法的訪問級別應該聲明private。這樣當對象被保存的時候,只有Hibernate可以為它分配標識符值。
映射文件的作用就是告訴Hibernate應該訪問哪個數據庫(database)中的哪張表(table)的哪些字段(column)。
映射文件應該保存在持久類的源文件目錄下,映射文件可隨意地命名,但hbm.xml的后綴已成為Hibernate開發者社區的約定。
本例用到的映射文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="events">
<class name="Event" table="EVENTS">
<!-- id用于標示標識符屬性,即數據表的主鍵,name對應實體中的屬性名,column對應數據表中的字段名-->
<id name="id" column="EVENT_ID">
<!-- 配置標識符的生成策略 -->
<generator class="native" />
</id>
<!-- property標示實體類中的非標識符屬性,
type指定Hibernate 映射類型,它們能使Java數據類型與SQL數據類型相互轉換
-->
<property name="date" type="timestamp" column="EVENT_DATE" />
<!-- 若不指定column屬性,則表示實體對象的屬性名即為數據表中字段的名稱 -->
<property name="title" />
</class>
</hibernate-mapping>
通過配置文件將應用程序與數據庫連接,配置數據庫的相關屬性。此外,還要添加映射文件資源,使得Hibernate能夠找到映射文件,并將映射文件與實體類關聯。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 設置連接數據庫的驅動 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 設置數據庫服務器的連接路徑 -->
<property name="connection.url">jdbc:mysql://localhost:3306/db</property>
<!-- 設置數據庫服務器的連接用戶 -->
<property name="connection.username">root</property>
<!-- 設置數據庫服務器的連接用戶的密碼 -->
<property name="connection.password">Lynn0714</property>
<!-- 數據庫連接池大小 -->
<property name="connection.pool_size">1</property>
<!-- SQL方言,要根據使用的數據庫來配置 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 設置Hibernate的自動session管理 -->
<property name="current_session_context_class">thread</property>
<!-- 設置二級cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- 設置運行時是否顯示調用的SQL語句 -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<!-- 使用的映射文件 -->
<mapping resource="events/events.hbm.xml" />
</session-factory>
</hibernate-configuration>
上圖配置并不是包含所有內容
上圖配置了Hibernate的SessionFactory,一個關聯于特定數據庫全局的工廠(factory)。如果你要使用多個數據庫,就要用多個的,通常把它們放在多個配置文件中。(Hibernate如何識別是在何時使用哪個配置文件?)
此處Ant操作全部仿照操作,不知道具體如何使用。
在這個環節中,需要創建一個全局的SessionFactory,通過SessionFactory來創建并打開Session,一個Session代表一個單線程的單元操作,SessionFactory則是個線程安全的全局對象,只需要被實例化一次。
package util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static{
try{
sessionFactory = new Configuration().configure().buildSessionFactory();
}catch(Throwable ex){
System.err.println("初始化SessionFactory失敗"+ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}
package events;
import java.util.Date;
import org.hibernate.Session;
import util.HibernateUtil;
public class EventManager {
public static void main(String[] args) {
EventManager mgr = new EventManager();
if (args[0].equals("store")) {
mgr.createAndStoreEvent("My Event", new Date());
}
HibernateUtil.getSessionFactory().close();
}
private void createAndStoreEvent(String title, Date theDate) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setDate(theDate);
session.save(theEvent);
session.getTransaction().commit();
}
}
按上述步驟操作完成,運行后出現下面異常:
出現java.lang.UnsupportedClassVersionError 錯誤的原因,是因為我們使用高版本的JDK編譯的Java class文件試圖在較低版本的JVM上運行,所報的錯誤。
出現這個錯誤,是因為缺少JTA的Jar包,添加上即可,由于我也不知道哪些是必須的就添加了lib\provided目錄下的所有Jar包
修正上述兩個錯誤后,運行成功
以上就是關于“學習Hibernate文檔筆記”的介紹,如果您想了解更多相關知識,可以關注一下動力節點的Java視頻,里面的課程內容細致全面,通俗易懂,適合沒有基礎的朋友學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習