日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate 入门----第一个Hibernate应用程序

發布時間:2025/3/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate 入门----第一个Hibernate应用程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(可參考Hibernate中文文檔--附件下載)
[align=center][size=medium] 第一個Hibernate應用程序 [/size][/align]

[b]一、首先我們將創建一個簡單的基于控制臺的(console-based)Hibernate應用程序。[/b]

我們所做的第一件事就是把所有需要用到的Java庫文件放進開發的目錄中。解壓縮從Hibernate網站下載的Hibernate發布包,并把庫文件拷到我們新建開發目錄下的/lib目錄下。看起來就像這樣:
.
+lib
antlr.jar
cglib.jar
asm.jar
asm-attrs.jars
commons-collections.jar
commons-logging.jar
ehcache.jar
hibernate3.jar
jta.jar
dom4j.jar

假設我們希望有一個小應用程序可以保存和查詢events(活動)。

接下來我們創建一個類,用來代表那些我們希望儲存在數據庫里的event。


[b]二、第一個class [/b]

我們的第一個持久化類是一個帶有一些屬性(property)的簡單JavaBean類:

package events;

import java.util.Date;

public class Event {
private Long id;

private String title;
private Date date;

public Event() {}

// ...getter/setter省略
}

把這個Java源代碼文件放到開發目錄下的src目錄里,注意包位置要正確。 現在這個目錄看起來應該像這樣:

.
+lib
<Hibernate and third-party libraries>
+src
+events
Event.java

下一步,我們把這個持久化類的信息告訴Hibernate。


[b]三、映射文件 [/b]
Hibernate需要知道怎樣去加載(load)和存儲(store)持久化類的對象。這正是Hibernate映射文件發揮作用的地方。映射文件告訴Hibernate它,應該訪問數據庫(database)里面的哪個表(table)及應該使用表里面的哪些字段(column)。

我們在映射文件里面包含需要持久化屬性的聲明。默認情況下,類里面的屬性都被視為非持久化的:

<hibernate-mapping>

<class name="events.Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native"/>
</id>
<property name="date" type="timestamp" column="EVENT_DATE"/>
<property name="title"/>
</class>

</hibernate-mapping>

把這個映射文件保存為Event.hbm.xml,放在EventJava類的源文件目錄下。映射文件可隨意地命名,但hbm.xml的后綴已成為Hibernate開發者社區的約定。現在目錄結構看起來應該像這樣:

.
+lib
<Hibernate and third-party libraries>
+src
+events
Event.java
Event.hbm.xml

我們繼續進行Hibernate的主要配置。


[b]四、Hibernate配置[/b]
現在我們已經有了一個持久化類和它的映射文件,該是配置Hibernate的時候了。在此之前,我們需要一個數據庫。在這里,我們使用MySQL數據庫, 你只需下載 mysql-connector-java-3.1.1-alpha-bin.jar文件,并把這個文件放在開發文件夾的lib/目錄下即可。

Hibernate是你的應用程序里連接數據庫的那層,所以它需要連接用的信息。連接是通過一個也由我們配置的JDBC連接池(connection pool)來完成的。注意,如果你希望使用其他的第三方連接池軟件,你必須拷貝所需的庫文件到你的classpath下,并使用不同的連接池設置。

為了保存Hibernate的配置,我們可以使用一個簡單的hibernate.properties文件,或者一個稍微復雜的hibernate.cfg.xml,甚至可以完全使用程序來配置Hibernate。多數用戶更喜歡使用XML配置文件:
<?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>

<!-- Database connection settings -->
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useServerPrepStmts=false</property>
<property name="connection.username">root</property>
<property name="connection.password">root</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>

<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>

<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<mapping resource="events/Event.hbm.xml"/>

</session-factory>

</hibernate-configuration>

把這個文件拷貝到源代碼目錄下面,這樣它就位于classpath的根目錄(/src/)的最后。Hibernate在啟動時會自動在classpath的根目錄查找名為hibernate.cfg.xml的配置文件。


[b]五、啟動和輔助類 [/b]
我們啟動Hibernate時要創建一個全局的SessoinFactory,SessionFactory可以創建并打開新的Session。一個Session代表一個單線程的單元操作,SessionFactory則是個線程安全的全局對象,只需要被實例化一次。

我們將創建一個HibernateUtil輔助類(helper class)來負責啟動Hibernate和更方便地操作SessionFactory。讓我們來看一下它的實現:

package util;

import org.hibernate.*;
import org.hibernate.cfg.*;

public class HibernateUtil {

private static final SessionFactory sessionFactory;

static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}

}
這個類不但在它的靜態初始化過程(僅當加載這個類的時候被JVM執行一次)中產生全局的SessionFactory,而且隱藏了它使用了靜態singleton的事實。它也可能在應用程序服務器中的JNDI查找SessionFactory。

把HibernateUtil.java放在開發目錄的源代碼路徑下,與放events的包并列:
.
+lib
<Hibernate and third-party libraries>
+src
+events
Event.java
Event.hbm.xml
+util
HibernateUtil.java
hibernate.cfg.xml

示例的基本框架完成了 - 現在我們可以用Hibernate來做些真正的工作。

[b]六、加載并存儲對象 [/b]
我們終于可以使用Hibernate來加載和存儲對象了,編寫一個帶有main()方法的EventManager類:

package events;
import org.hibernate.Session;

import java.util.Date;

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());
}
else if (args[0].equals("list")) {
List events = mgr.listEvents();
for (int i = 0; i < events.size(); i++) {
Event theEvent = (Event) events.get(i);
System.out.println("Event: " + theEvent.getTitle() +
" Time: " + theEvent.getDate());
}
}

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();
}
private List listEvents() {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

List result = session.createQuery("from Event").list();

session.getTransaction().commit();

return result;
}

}

可以在Eclipse執行Open Run Dialog...鍵入不同的Arguments運行不同的操作。

我們創建了個新的Event對象并把它傳遞給Hibernate。現在Hibernate負責與SQL打交道,并把INSERT命令傳給數據庫。在運行之前,讓我們看一下處理Session和Transaction的代碼。

sessionFactory.getCurrentSession()是干什么的呢?首先,只要你持有SessionFactory(我們通過HibernateUtil,可以隨時獲得),大可在任何時候、任何地點調用這個方法。getCurrentSession()方法總會返回“當前的”工作單元。

Session在第一次被使用的時候,即第一次調用getCurrentSession()的時候,其生命周期就開始。然后它被Hibernate綁定到當前線程。當事務結束的時候,不管是提交還是回滾,Hibernate會自動把Session從當前線程剝離,并且關閉它。假若你再次調用getCurrentSession(),你會得到一個新的Session,并且開始一個新的工作單元。這種線程綁定的編程模型(model)是使用Hibernate的最廣泛的方式,因為它支持對你的代碼靈活分層。

簡單地搭建Hibernate、并完成配置至此結束!

(可參考Hibernate中文文檔)

總結

以上是生活随笔為你收集整理的Hibernate 入门----第一个Hibernate应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。