當(dāng)前位置:
首頁 >
在Eclipse中写第一个hibernate小例子
發(fā)布時(shí)間:2025/4/16
62
豆豆
生活随笔
收集整理的這篇文章主要介紹了
在Eclipse中写第一个hibernate小例子
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在hibernate自帶的文檔中,包含了一個(gè)很簡(jiǎn)單的小例子,不過這個(gè)小例子是基于ant的,而且說的不是很詳細(xì),不利于新手學(xué)習(xí)。在這里,我將在Eclipse中實(shí)現(xiàn)這個(gè)例子,并給出詳細(xì)的實(shí)現(xiàn)步驟。
??? 首先,我們要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù),并生成一個(gè)表,來供hibernate訪問。在這里我們采用MySQL作為DBMS。我們的數(shù)據(jù)庫(kù)取名為hbtest,生成一個(gè)名叫EVENTS的表。生成數(shù)據(jù)庫(kù)的操作比較簡(jiǎn)單,我就不介紹了,生成表的sql語句為:
create?table?EVENTS?( EVENT_ID?int(6)?AUTO_INCREMENT, EVENT_DATE?date, TITLE?varchar(20), primary?key?(EVENT_ID)); ??? 接下來,我們?cè)贓clipse中創(chuàng)建一個(gè)java項(xiàng)目。之后我們要寫一個(gè)javabean類,來和數(shù)據(jù)庫(kù)中的這個(gè)表來進(jìn)行映射。很顯然,在上面的表中,包還3個(gè)字段,所以我們的這個(gè)javabean類中也包含3個(gè)屬性,具體代碼如下:
package?org.hibernate.tutorial.domain; //上面的這個(gè)包路徑比較長(zhǎng),因?yàn)樵又芯褪沁@樣,我沒有修改 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)?{??? ????????//這里要注意,這個(gè)set方法是private的, ????????//目的是不讓普通的程序員使用它, ????????//但是hibernate框架還是可以通過反射機(jī)制訪問私有屬性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; ????} } ??? 接下來,我們要寫一個(gè)配置文件,將上述javabean類和數(shù)據(jù)庫(kù)表映射起來。這個(gè)配置文件的名字叫做Event.hbm.xml,具體內(nèi)容如下:
<?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="org.hibernate.tutorial.domain"> ????<class?name="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> ??? 在上述配置文件中,我們要注意如下事項(xiàng):如果數(shù)據(jù)庫(kù)字段和javabean類屬性名字不同,則要明確指定映射關(guān)系,就像上面的第11行;名字相同就不用指定指定了,就像第12行。這個(gè)配置文件要放在哪里呢?我們只需在源代碼文件夾中新建一個(gè)文件夾,將其放進(jìn)去就好了。具體在Eclipse中的操作為,建立一個(gè)名叫mapping的包(一個(gè)包就相當(dāng)于一個(gè)文件夾),然后把這個(gè)配置文件放進(jìn)去。
??? 接下來,我們?cè)趕rc文件夾中創(chuàng)建一個(gè)名叫hibernate.cfg.xml的文檔,來對(duì)hibernate進(jìn)行綜合配置,內(nèi)容如下:
<?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> ????????<!--?數(shù)據(jù)庫(kù)連接設(shè)置,根據(jù)具體情況來,特別是用戶名和密碼?--> ????????<property?name="connection.driver_class">com.mysql.jdbc.Driver</property> ????????<property?name="connection.url">jdbc:mysql://localhost:3306/hbtest</property> ????????<property?name="connection.username">root</property> ????????<property?name="connection.password">123456</property> ????????<!--?JDBC連接池(內(nèi)置的)?--> ????????<property?name="connection.pool_size">1</property> ????????<!--?SQL語句的方言?--> ????????<property?name="dialect">org.hibernate.dialect.HSQLDialect</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> ????????<!--?Drop?and?re-create?the?database?schema?on?startup?--> ????????<property?name="hbm2ddl.auto">create</property> ????????<mapping?resource="mapping/Event.hbm.xml"/> ????</session-factory> </hibernate-configuration> ??? 大家注意上面的第25行,"mapping/Event.hbm.xml"這個(gè)路徑要和我們上面講的對(duì)應(yīng)起來,也就是我們新建了一個(gè)mapping包,然后把Event.hbm.xml這個(gè)配置文件放了進(jìn)去。如果你的配置文件放在其他地方,這個(gè)設(shè)置就要修改。
??? 接下來我們寫一個(gè)工具類。因?yàn)閔ibernate在執(zhí)行的時(shí)候,總是要用到SessionFactory這個(gè)東西,而得到這個(gè)東西的方法稍微有點(diǎn)復(fù)雜,因此我們寫一個(gè)工具類,唯一的功能就是得到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; ????} } ??? 接下來,我們寫一個(gè)main函數(shù),來檢測(cè)一下hibernate是否能夠成功運(yùn)行,代碼如下:
package?events; import?org.hibernate.Session; import?java.util.Date; import?util.HibernateUtil; import?org.hibernate.tutorial.domain.Event; public?class?EventManager?{ ????public?static?void?main(String[]?args)?{ ????????EventManager?mgr?=?new?EventManager(); ????????????mgr.createAndStoreEvent("My?Event",?new?Date()); ????????HibernateUtil.getSessionFactory().close(); ????} ????private?void?createAndStoreEvent(String?title,?Date?theDate)?{ ????????Session?session?=?HibernateUtil.getSessionFactory().getCurrentSession(); ????????session.beginTransaction(); ????????//建立一個(gè)Event對(duì)象并進(jìn)行賦值 ????????Event?theEvent?=?new?Event(); ????????theEvent.setTitle(title); ????????theEvent.setDate(theDate); ????????//將該對(duì)象寫入數(shù)據(jù)庫(kù) ????????session.save(theEvent); ????????session.getTransaction().commit(); ????} } ??? 最后,特別注意,hibernate的運(yùn)行是需要大量第三方類庫(kù)支持的,因此我們還需要將這些類庫(kù)導(dǎo)入到我們的這個(gè)項(xiàng)目中,同時(shí)還要把hibernate自帶的log4j配置文件也復(fù)制過來。這些內(nèi)容都在hibernate的發(fā)布包中,大家自己找。
??? 當(dāng)所有的工作都做完后,這個(gè)項(xiàng)目的布局是如下圖所示:
??? 至此,最簡(jiǎn)單的hibernate小例子就完成了,應(yīng)該可以運(yùn)行了
??? 首先,我們要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù),并生成一個(gè)表,來供hibernate訪問。在這里我們采用MySQL作為DBMS。我們的數(shù)據(jù)庫(kù)取名為hbtest,生成一個(gè)名叫EVENTS的表。生成數(shù)據(jù)庫(kù)的操作比較簡(jiǎn)單,我就不介紹了,生成表的sql語句為:
??? 接下來,我們?cè)趕rc文件夾中創(chuàng)建一個(gè)名叫hibernate.cfg.xml的文檔,來對(duì)hibernate進(jìn)行綜合配置,內(nèi)容如下:
??? 接下來我們寫一個(gè)工具類。因?yàn)閔ibernate在執(zhí)行的時(shí)候,總是要用到SessionFactory這個(gè)東西,而得到這個(gè)東西的方法稍微有點(diǎn)復(fù)雜,因此我們寫一個(gè)工具類,唯一的功能就是得到SessionFactory,這樣使用起來就很方便了,代碼如下:
??? 當(dāng)所有的工作都做完后,這個(gè)項(xiàng)目的布局是如下圖所示:
??? 至此,最簡(jiǎn)單的hibernate小例子就完成了,應(yīng)該可以運(yùn)行了
轉(zhuǎn)載于:https://www.cnblogs.com/liuzhuqing/archive/2012/08/06/7480751.html
總結(jié)
以上是生活随笔為你收集整理的在Eclipse中写第一个hibernate小例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj 2728(最小比率生成树)
- 下一篇: POJ 1848 (一道不错的树形dp)