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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对“纯手工编写的第一个Hibernate程序”的改进

發(fā)布時間:2025/4/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对“纯手工编写的第一个Hibernate程序”的改进 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在上一篇博文《純手工編寫第一個Hibernate程序》中,介紹了如何手工編寫第一個簡單的Hibernate程序。在那個例子中,為了降低程序編寫的難度,所有的類都沒有包的聲明。然而在實(shí)際開發(fā)中,為了解決命名沖突的問題,通常都把類聲明在某個包中。因此,本篇博文就介紹如何在第一個程序例子的基礎(chǔ)上,為類添加包聲明,并訪問上個例子保存的阿湯哥的信息(為方便閱讀,所有程序、配置文件中與上個實(shí)例中重復(fù)的注釋都被刪除,讀者若有不明白之處可參考上篇博文)。<?xml:namespace prefix="o">

?

?xml:namespace>

我們在目錄E:\DemoPrograms下新建一個目錄ImprovedHibernate,來保存本實(shí)例所有的文件。

?

首先來看UserUser.java文件中類。

?

  • package?com.abc.people; ?

  • ?

  • public?class?User?{ ?

  • ???? ?

  • ????private?int?id; ?

  • ????private?String?name; ?

  • ????private?int?age; ?

  • ????private?String?gender; ?

  • ???? ?

  • ????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?int?getAge()?{ ?

  • ????????return?age; ?

  • ????} ?

  • ?

  • ????public?void?setAge(int?age)?{ ?

  • ????????this.age?=?age; ?

  • ????} ?

  • ?

  • ??public?String?getGender() ?

  • ??{ ?

  • ?????return?gender; ?

  • ??} ?

  • ?? ?

  • ??public?void?setGender(String?gender) ?

  • ??{ ?

  • ?????this.gender?=?gender; ?

  • ??} ?

  • ???? ?

  • } ?

  • (User類)

    如上述第一行代碼所示,我們將User類聲明在com.abc.people包中。包的層次結(jié)構(gòu)與目錄的層次結(jié)構(gòu)是一一對應(yīng)的。因此,我們在目錄ImprovedHibernate下建立目錄結(jié)構(gòu)com\abc\people(如下圖所示)。

    ?

    然后將User.java放置到people目錄中,編譯之。實(shí)際上,User.java文件放置在哪里并不重要,重要的是編譯后的User.class文件要在正確的位置。經(jīng)過上述的編譯后,就在正確的位置&mdash;&mdash;people目錄下&mdash;&mdash;生成了User.class文件。

    ?

    再來看User.hbm.xml映射文件。由于目前User類在包com.abc.people中,因此在hibernate-mapping元素中就用package屬性指定了此包名。如下面的第六行所示。

  • <?xml?version="1.0"?encoding="gb2312"?>?

  • <!DOCTYPE?hibernate-mapping?PUBLIC ?

  • ????"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN" ?

  • ????"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">?

  • ????<!--package指定類的包前綴-->?

  • ????<hibernate-mapping?package="com.abc.people">?

  • ???????? ?

  • ????<class?name="User"?table="users">?

  • ??????????? ?

  • ???????????<id?name="id"?type="java.lang.Integer"?column="ID">?

  • ??????????????<generator?class="identity"/>?

  • ?????????</id>?

  • ?????????<property?name="age"?column="age"/>?

  • ?????????<property?name="name"/>?

  • ?????????<property?name="gender"/>?

  • ????</class>?

  • </hibernate-mapping>?

  • User.hbm.xml文件)

    ?

    此文件應(yīng)與User.java文件放置在同一目錄下(更準(zhǔn)確地講,是應(yīng)該與User.class放置在同一目錄下),即ImprovedHibernate下的com\abc\people目錄下。

    ?

    接著來看配置文件hibernate.cfg.xml。由于映射文件User.hbm.xml放置在了目錄com\abc\people中,因此需要修改resource的值。如下面的20至22行所示。?

  • <?xml?version="1.0"?encoding="gb2312"?>?

  • ?

  • <!DOCTYPE?hibernate-configuration?PUBLIC ?

  • ????????"-//Hibernate/Hibernate?Configuration?DTD?3.0//EN" ?

  • ????????"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">?

  • ?

  • <hibernate-configuration>?

  • ?

  • ???????<session-factory>?

  • ?

  • ????????<property?name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>?

  • ????????<property?name="connection.url">jdbc:sqlserver://localhost;databaseName=mydb</property>?

  • ????????<property?name="connection.username">sa</property>?

  • ????????<property?name="connection.password">admin123</property>?

  • ????????<property?name="connection.pool_size">1</property>?

  • ????????<property?name="dialect">org.hibernate.dialect.SQLServerDialect</property>?

  • ????????<property?name="current_session_context_class">thread</property>?

  • ????????<property?name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>?

  • ????????<property?name="show_sql">true</property>?

  • ????????<!--指定要用到的映射文件,要寫出相對于ImprovedHibernate ?

  • ????????目錄的完整路徑。-->?

  • ????????<mapping?resource="com/abc/people/User.hbm.xml"?/>?

  • ???????? ?

  • ????</session-factory>?

  • ?

  • </hibernate-configuration>?

  • hibernate.cfg.xml文件

    ?

    這里需要注意的是,用的是&ldquo;/&rdquo;作為分隔符,而不是Windows風(fēng)格的&ldquo;\&rdquo;。

    接著來修改TestHibernate.java文件。我們把它聲明在com.abc包下,并修改此程序的功能為讀取第一個hibernate程序中保存的阿湯哥的信息。具體如下所示:

  • //包聲明。 ?

  • package?com.abc; ?

  • ?

  • import?org.hibernate.Session; ?

  • import?org.hibernate.SessionFactory; ?

  • import?org.hibernate.cfg.Configuration; ?

  • //注意要正確地引入User類。 ?

  • import?com.abc.people.User; ?

  • ?

  • public?class?TestHibernate?{ ?

  • ???? ?

  • ????public?static?void?main(String[]?args)?{ ?

  • ???????????????? ?

  • ????Configuration?cfg?=?new?Configuration().configure(); ?

  • ????SessionFactory?factory?=?cfg.buildSessionFactory(); ?

  • ????Session?session?=?factory.getCurrentSession(); ?

  • ????????session.beginTransaction(); ?

  • ???????? ?

  • ????????//從數(shù)據(jù)庫中加載一個User實(shí)例。需要兩個參數(shù),第一個參數(shù) ?

  • ????????//com.abc.people.User.class是User類的Class(參見Class類 ?

  • ????????//的相關(guān)內(nèi)容)對象。1是這個User實(shí)例的標(biāo)識屬性。實(shí)際上就 ?

  • ????????//是根據(jù)主鍵從數(shù)據(jù)庫中讀取一條記錄,然后封裝成一個User對象。 ?

  • ????????//是不是比自己寫JDBC語句方便、自然多了呢? ?

  • ????????User?user?=?(User)session.load(com.abc.people.User.class,?1); ?

  • ???????? ?

  • ????????String?name?=?user.getName(); ?

  • ????????String?gender?=?user.getGender(); ?

  • ???????? ?

  • ????????System.out.println("****************"); ?

  • ????????System.out.println("*?姓名:"?+?name+"?*"); ?

  • ????????System.out.println("*?性別:"?+?gender+"?????*"); ?

  • ????????System.out.println("****************"); ?

  • ???????? ?

  • ????????session.getTransaction().commit(); ?

  • ???????? ?

  • ????????factory.close(); ?

  • ???? ?

  • ????}??? ?

  • } ?

  • ?(TestHibernate.java文件)

    ?

    相應(yīng)地,根據(jù)其所在包名,此文件應(yīng)放置在ImprovedHibernate目錄下的com\abc目錄下。

    ?

    此時若編譯TestHibernate.java,則會報一大堆的錯誤,說XX包不存在,YY符號找不到這是因?yàn)槲覀冞€沒有引入程序要用到的hibernate的JAR包,也沒有正確地設(shè)置CLASSPATH環(huán)境變量。這次要用到的JAR包和上次一樣,所以只需簡單地把上次用到的lib目錄拷貝到ImprovedHibernate下即可。此時,整個實(shí)例的目錄結(jié)構(gòu)如下圖所示:

    ?

    下一步就是應(yīng)該編寫批處理文件setclasspath.bat了。與上篇的批處理文件類似,需要把要用到的JAR包添加到CLASSPATH中。尤為重要的是,不要漏掉了當(dāng)前目錄。此批處理文件的內(nèi)容如下。?

  • set?classpath=.;E:\DemoPrograms\ImprovedHibernate\lib\hibernate3.jar;E:\DemoPrograms\ImprovedHibernate\lib\sqljdbc4.jar;E:\DemoPrograms\ImprovedHibernate\lib\dom4j-1.6.1.jar;E:\DemoPrograms\ImprovedHibernate\lib\slf4j-api-1.6.2.jar;E:\DemoPrograms\ImprovedHibernate\lib\slf4j-simple-1.6.2.jar;E:\DemoPrograms\ImprovedHibernate\lib\hibernate-jpa-2.0-api-1.0.1.Final.jar;E:\DemoPrograms\ImprovedHibernate\lib\cglib-2.2.jar;E:\DemoPrograms\ImprovedHibernate\lib\commons-collections-3.1.jar;E:\DemoPrograms\ImprovedHibernate\lib\javassist-3.12.0.GA.jar;E:\DemoPrograms\ImprovedHibernate\lib\jta-1.1.jar?

  • (批處理文件setclasspath.bat

    ?

    注意:上述set命令是一個完整的DOS命令,不要隨便加回車鍵,否則會報錯。

    在命令行窗口中把目錄切換到ImprovedHibernate下,運(yùn)行此批處理文件。由于前面的com\abccom\abc\people目錄都是放置在此目錄下的,因此在此目錄下執(zhí)行javacjava命令時,CLASSPATH中的當(dāng)前目錄就是此目錄。這樣User類等都可以被正確地加載。用如下的命令來編譯TestHibernate.java

    ?

    javac?com\abc\TestHibernate.java

    ?

    這樣在com\abc目錄下就生成了TestHibernate.class文件。運(yùn)行用如下的命令:java?com.abc.TestHibernate(寫類的全名)。運(yùn)行前別忘了開啟SQL?Server服務(wù)。我們可以看到在一長串的日志之后,程序運(yùn)行的結(jié)果如下:

    成功運(yùn)行了。

    點(diǎn)此處下載本示例的壓縮包,或下面的&ldquo;附件下載&rdquo;。若創(chuàng)建了目錄E:\DemoPrograms,則直接解壓到此目錄下,再把所需要的JAR包復(fù)制到lib目錄中&mdash;&mdash;受上傳文件最大尺寸限制,壓縮包中沒有JAR包&mdash;&mdash;就可以使用了。

    (后記:十分感謝博友MJ007關(guān)于圖片顯示問題的提醒。此問題已解決。歡迎各位博友多提建設(shè)性建議,謝謝!)


    ?????? 猛戳這里全面系統(tǒng)地學(xué)習(xí)MyBatis 3

    轉(zhuǎn)載于:https://blog.51cto.com/legend2011/747483

    總結(jié)

    以上是生活随笔為你收集整理的对“纯手工编写的第一个Hibernate程序”的改进的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。