![javaEE實驗報告6-Hibernate持久層編程_第1頁](http://file4.renrendoc.com/view/4ab08b37ef2c3afd4540d5a39bf13300/4ab08b37ef2c3afd4540d5a39bf133001.gif)
![javaEE實驗報告6-Hibernate持久層編程_第2頁](http://file4.renrendoc.com/view/4ab08b37ef2c3afd4540d5a39bf13300/4ab08b37ef2c3afd4540d5a39bf133002.gif)
![javaEE實驗報告6-Hibernate持久層編程_第3頁](http://file4.renrendoc.com/view/4ab08b37ef2c3afd4540d5a39bf13300/4ab08b37ef2c3afd4540d5a39bf133003.gif)
![javaEE實驗報告6-Hibernate持久層編程_第4頁](http://file4.renrendoc.com/view/4ab08b37ef2c3afd4540d5a39bf13300/4ab08b37ef2c3afd4540d5a39bf133004.gif)
![javaEE實驗報告6-Hibernate持久層編程_第5頁](http://file4.renrendoc.com/view/4ab08b37ef2c3afd4540d5a39bf13300/4ab08b37ef2c3afd4540d5a39bf133005.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
計算機科學與技術系實驗報告第1頁共7頁第1頁共2頁Java企業(yè)級開發(fā)(J2EE)實驗報告指導教師:王磊課程名稱:Java企業(yè)級開發(fā)(J2EE)年級:12實驗日期:2014-3-19姓名:xxx學號:03班級:2班實驗名稱:Hibernate持久層編程實驗序號:實驗六成員人數(shù):1一、 實驗目的及要求實驗目的:1、理解orm框架;2、掌握Hibernate的本質(對JDBC進行了輕量級的封裝)實驗原理:1、Hibernate可以按照不同數(shù)據(jù)庫,使用最優(yōu)化的SQL語句處理不同的操作;2、引入Hibernate可以是工作人員角色細化;讓程序員更關系業(yè)務流程;3、Hibernate使得分層更加清晰,耦合性更小,通用性更強。二、實驗環(huán)境MicrosoftSQLServer2008,MyEclipse,Tomcat;三、實驗內(nèi)容及完成情況1、創(chuàng)建雇員數(shù)據(jù)庫/**創(chuàng)建者:王磊*時間:*功能:建立雇員數(shù)據(jù)庫,請在SSMS中直接運行*/createdatabaseEmployee--庫名為Employeeon(name='Employee_data',filename='d:\javaEE使用的數(shù)據(jù)庫\Employee_data.mdf',size=10mb)logon(name='Employee_log',filename='d:\javaEE使用的數(shù)據(jù)庫\Employee_log.ldf',size=10mb)gouseEmployeegocreatetableEmployee--創(chuàng)建雇員表(idintprimarykey,--標簽編號,主碼empnamenvarchar(20)notnull,--雇員姓名可變字符串類型,長度emailnvarchar(50),hiredatedatenotnull)2、引入sql驅動包sqljdbc4.jar。3、引入hibernate包。4、創(chuàng)建com.wl.domain包。在這個包下面創(chuàng)建Employee類。5、編寫Employee類代碼。packagecom.wl.domain;publicclassEmployee{ privateIntegerid; privateStringname; privateStringemail; privatejava.util.Datehiredate; publicIntegergetId(){ returnid; } publicvoidsetId(Integerid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; } publicStringgetEmail(){ returnemail; } publicvoidsetEmail(Stringemail){ this.email=email; } publicjava.util.DategetHiredate(){ returnhiredate; } publicvoidsetHiredate(java.util.Datehiredate){ this.hiredate=hiredate; }}6、在com.wl.domain包下面手工創(chuàng)建Employee.hmb.xml文檔。(實際開發(fā)項目時,是自動生成的xml配置文件,但是建議初學者第一次手工編寫xml文件,以便加深印象。)7、Employee.hmb.xml文檔內(nèi)容如下:<?xmlversion="1.0"encoding="utf-8"?><!--加入DTD約束文件,可以從驅動包里找到--><!DOCTYPEhibernate-mappingPUBLIC "-//Hibernate/HibernateMappingDTD3.0//EN" "/hibernate-mapping-3.0.dtd"><hibernate-mappingpackage="com.wl.domain"><classname="Employee"table="Employee"> <!--id用于指定主碼--> <idname="id"column="id"type="java.lang.Integer"> <!--generator用于指定主碼的生成策略--> <generatorclass="increment"> <paramname="id"></param> </generator> </id> <!--配置除了主碼之外的其他屬性--> <propertyname="name"type="java.lang.String"> <columnname="empname"not-null="false"/> </property> <propertyname="email"type="java.lang.String"> <columnname="email"not-null="true"/> </property> <propertyname="hiredate"type="java.util.Date"> <columnname="hiredate"not-null="false"/> </property></class></hibernate-mapping>8、在src下面編寫hibernate.cfg.xml配置文件。9、hibernate.cfg.xml文檔內(nèi)容如下:<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory> <propertyname="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property><propertyname="hibernate.connection.username">sa</property><propertyname="hibernate.connection.password">123456</property><propertyname="hibernate.connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=Employee</property> <propertyname="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property> <propertyname="hibernate.show_sql">true</property><mappingresource="com/wl/domain/Employee.hbm.xml"/></session-factory></hibernate-configuration>10、創(chuàng)建com.wl.view包,在這個包下面編寫測試主函數(shù)EmployeeTest.java。packagecom.wl.view;importjava.util.Date;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.Transaction;importorg.hibernate.cfg.*;importcom.wl.domain.Employee;publicclassEmployeeTest{ publicstaticvoidmain(String[]args){ //使用hibernate完成數(shù)據(jù)庫的CRUD操作。 //1.創(chuàng)建configuration,該對象用于讀取ibernate.cfg.xml,//并完成初始化工作 Configurationconfiguration=newConfiguration().configure("hibernate.cfg.xml"); //2.創(chuàng)建SessionFactory,會話工廠,是一個重量級的對象。一個項目中只能加載一次,最好使用單態(tài)模式。 SessionFactorysessionFactory=configuration.buildSessionFactory(); //3.創(chuàng)建會話session Sessionsession=sessionFactory.openSession(); //4.添加一條雇員信息 Employeeemployee=newEmployee(); //employee.setId(111);//此處要注意:創(chuàng)建數(shù)據(jù)庫時,如果指定identity(1,1)自增長策略,則配置Employee.hmb.xml文件時,必須配置主碼策略為native,或者indentity。//<!--generator用于指定主碼的生成策略-->// <generatorclass="native">// <paramname="id"></param>// </generator> employee.setName("wl"); employee.setEmail("wl@126.com"); employee.setHiredate(newDate());//在hibernate中執(zhí)行增加、刪除和修改語句,必須使用事務。查詢不需要。 //5.創(chuàng)建一個事務 Transactionransaction=session.beginTransaction(); //6.事務開始執(zhí)行 transaction.begin(); session.save(employee); //7.提交事務 mit(); //8.一定要及時釋放資源。 session.close(); }}11、在項目中運行主函數(shù)文件,觀察運行結果。12、觀察后臺數(shù)據(jù)庫變化。出現(xiàn)的問題及解決方案1、主碼生成策略常見的有:(1)自動增長identity適用于MySQL、DB2、MSSQLServer,采用數(shù)據(jù)庫生成的主鍵,用于為long、short、int類型生成唯一標識。(2)sequenceDB2、Oracle均支持的序列,用于為long、short或int生成唯一標識。(3)3、hilo使用一個高/低位算法生成的long、short或int類型的標識符,給定一個表和字段作為高位值的來源,默認的表是hibernate_unique_key,默認的字段是next_hi。它將id的產(chǎn)生源分成兩部分,DB+內(nèi)存,然后按照算法結合在一起產(chǎn)生id值,可以在很少的連接次數(shù)內(nèi)產(chǎn)生多條記錄,提高效率。(4)native會根據(jù)底層數(shù)據(jù)庫的能力,從identity、sequence、hilo中選擇一個,靈活性更強,但此時,如果選擇sequence或者hilo,則所有的表的主鍵都會從Hibernate默認的sequence或者hilo表中取。并且,有的數(shù)據(jù)庫對于默認情況主鍵生成測試的支持,效率并不是很高,對于oracle采用Sequence方式,對于MySQL和SQLServer采用identity(自增主鍵生成機制),native就是將主鍵的生成工作交由數(shù)據(jù)庫完成,hibernate不管(很常用)。(5)seqhilosequence和hilo的結合,hilo的高位由sequence產(chǎn)生,所以也需要底層數(shù)據(jù)庫的支持,通過hilo算法實現(xiàn),但是主鍵歷史保存在Sequence中,適用于支持Sequence的數(shù)據(jù)庫,如Oracle(比較少用)。(6)increment這個是由Hibernate在內(nèi)存中生成主鍵,每次增量為1,不依賴于底層的數(shù)據(jù)庫,因此所有的數(shù)據(jù)庫都可以使用,但問題也隨之而來,由于是Hibernate生成的,所以只能有一個Hibernate應用進程訪問數(shù)據(jù)庫,否則就
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力保安工作總結
- 2025年全球及中國交流造水機行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國IO-Link信號塔行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國吸收式工業(yè)消聲器行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球低聚半乳糖粉末行業(yè)調研及趨勢分析報告
- 2025-2030全球雙通道聽力計行業(yè)調研及趨勢分析報告
- 2025年全球及中國冰淇淋服務用品行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球汽車水泵機械密封行業(yè)調研及趨勢分析報告
- 2025-2030全球CT 掃描計量行業(yè)調研及趨勢分析報告
- 2025合同模板建設工程施工合同(港口)范本
- (二模)遵義市2025屆高三年級第二次適應性考試試卷 地理試卷(含答案)
- 二零二五隱名股東合作協(xié)議書及公司股權代持及回購協(xié)議
- IQC培訓課件教學課件
- 2025年計算機二級WPS考試題目
- 高管績效考核全案
- 2024年上海市中考英語試題和答案
- 教育部《中小學校園食品安全和膳食經(jīng)費管理工作指引》知識培訓
- 長沙醫(yī)學院《無機化學》2021-2022學年第一學期期末試卷
- eras婦科腫瘤圍手術期管理指南解讀
- GB/T 750-2024水泥壓蒸安定性試驗方法
- 初一到初三英語單詞表2182個帶音標打印版
評論
0/150
提交評論