馬士兵筆記分類(lèi)hibernate09人閱讀評(píng)論13收藏舉報(bào)_第1頁(yè)
馬士兵筆記分類(lèi)hibernate09人閱讀評(píng)論13收藏舉報(bào)_第2頁(yè)
馬士兵筆記分類(lèi)hibernate09人閱讀評(píng)論13收藏舉報(bào)_第3頁(yè)
馬士兵筆記分類(lèi)hibernate09人閱讀評(píng)論13收藏舉報(bào)_第4頁(yè)
馬士兵筆記分類(lèi)hibernate09人閱讀評(píng)論13收藏舉報(bào)_第5頁(yè)
已閱讀5頁(yè),還剩211頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Hibernateannotation筆記馬士分類(lèi):hibernate2011-11-1809:5914997(13)收藏hibernatesessionstring12HibernateUML345第6課第一個(gè)示例HibernateoWorld7第7課建立Annotation版本的World9第8課什么是O/RMap11一 定義:.二 Hibernate的創(chuàng)始人:.三 Hibernate做什么:.四 Hibernate存在的原因:.五 Hibernate的優(yōu)缺點(diǎn):.六 Hibernate使用范圍:.9Hibernate:Hibernate一、對(duì)象---關(guān)系映射模式.O/R10Hibernate(OR一 項(xiàng)目名稱(chēng).二 原代碼.11Hibernate一 提綱.二、MYSQL三、Hibernate.cfg.xml:hbm2ddl.auto16四、DDL16五、Junit16 ehibernate.cfg.xml:show_sql17 hibernate.cfg.xml:format_sql17 表名和類(lèi)名不同,對(duì)表名進(jìn)行配置.17九 字段名和屬性相同.十、字段名和屬性名不同.十一 不需要(持久化)psersistence的字段.十二 映射日期與時(shí)間類(lèi)型,指定時(shí)間精度.十三 映射枚舉類(lèi)型.12hibernate13ID一、Xml<generator>20二、annotateon211、AUTO212、IDENTITY3、SEQUENCE4OracleSequence5、TABLEid三 聯(lián)合主鍵.1、xml2、annotation第14課Hibernate開(kāi)發(fā)接口(重點(diǎn))一 Configuration(AnnotationConfiguration)二 SessionFactory三 Session1 管理一個(gè)數(shù)據(jù)庫(kù)的任務(wù)單元.2 save();3 delete()4 load()5 Get()6 load()與get()區(qū)別.7 update()8 saveOrUpdate()9 clear()10 flush()11 evict()15一 瞬時(shí)對(duì)象(TransientObject):.二 持久化對(duì)象(PersistentObject):.三 離線對(duì)象(DetachedObject):.四 三種狀態(tài)的區(qū)分:.五 總結(jié):.16一 一對(duì)一關(guān)聯(lián)映射. lism)37 唯一外鍵關(guān)聯(lián)-雙向.40(三 主鍵關(guān)聯(lián)-單向(不重要)(四 主鍵關(guān)聯(lián)-雙向(不重要)(五 聯(lián)合主鍵關(guān)聯(lián)(Annotation方式)二 component(組件)關(guān)聯(lián)映射.(一 Component關(guān)聯(lián)映射:.(二 User實(shí)體類(lèi):.(三 Contact值對(duì)象:. xml--User映射文件(組件映射):.46 annotateon注解.46(六 導(dǎo)出數(shù)據(jù)庫(kù)輸出SQL語(yǔ)句:.(七 數(shù)據(jù)表結(jié)構(gòu):.(八 組件映射數(shù)據(jù)保存:.三 多對(duì)一–單向.(一 對(duì)象模型圖:.(二 關(guān)系模型:.(三 關(guān)聯(lián)映射的本質(zhì):.(四 實(shí)體類(lèi).(五 xml方式:映射文件:.(六 annotation 多對(duì)一(先group(對(duì)象持久化狀態(tài)后,再保存user)):.50(八 重要屬性-cascade(級(jí)聯(lián)):.(九 多對(duì) 加載數(shù)據(jù).四 一對(duì)多-單向.(一 對(duì)象模型:.(二 關(guān)系模型:.(三 多對(duì)一、一對(duì)多的區(qū)別:.(四 實(shí)體類(lèi).(五 xml方式:映射.(六 annotateon注解. 導(dǎo)出至數(shù)據(jù)庫(kù)(hbmàddl)生成的SQL語(yǔ)句:.53 一對(duì)多單向?qū)嵗?53(九 生成的SQL語(yǔ)句:. 一對(duì)多,在一的一端關(guān)系的缺點(diǎn):.54 一對(duì)多單向數(shù)據(jù)加載:.54(十二 加載生成SQL語(yǔ)句:.五 一對(duì)多-雙向.(一 xml方式:映射.(二 annotateon方式注解.(三 數(shù)據(jù)保存:.(四 關(guān)于inverse屬性:.(五 Inverse和cascade區(qū)別:.(六 一對(duì)多雙向關(guān)聯(lián)映射總結(jié):.六 多對(duì)多-單向.(一 實(shí)例場(chǎng)景:.(二 對(duì)象模型:.(三 關(guān)系模型:.(四 實(shí)體類(lèi).(五 xml方式:映射.(六 annotation注解方式.(七 生成SQL語(yǔ)句.(八)數(shù)據(jù)庫(kù)表及結(jié)構(gòu):.(九)多對(duì)多關(guān)聯(lián)映射單向數(shù)據(jù):.59(十)61七、多對(duì)多-雙向.61(一)xml(二)annotation八 關(guān)聯(lián)關(guān)系中的CRUD_Cascade_Fetch九、集合映射.十、繼承關(guān)聯(lián)映射.(一 繼承關(guān)聯(lián)映射的分類(lèi):.(二)對(duì)象模型:.(三 單表繼承SINGLE_TABLE:.(四 具體表繼承JOINED:.(五 類(lèi)表繼承TABLE_PER_CLASS(六 三種繼承關(guān)聯(lián)映射的區(qū)別:.17hibernate一 節(jié)點(diǎn)實(shí)體類(lèi):.二 xml方式:映射文件:.三 annotation注解.四 測(cè)試代碼:.五 相應(yīng)的類(lèi)代碼:.18一 設(shè)計(jì).二 代碼:.三 注意.19Hibernate(QueryLanguage)一 Hibernate可以使用的查詢(xún)語(yǔ)言.二 實(shí)例一.三 實(shí)體一測(cè)試代碼:.四 實(shí)例二. 實(shí)例二測(cè)試代碼.87第20課QuerybyCriteria(QBC)89 實(shí)體代碼:.89二 Restrictions用法.三 工具類(lèi)Order提供設(shè)置排序方式.四 工具類(lèi)Projections提供對(duì)查詢(xún)結(jié)果進(jìn)行統(tǒng)計(jì)與分組操作.五 QBC分頁(yè)查詢(xún).六 QBC復(fù)合查詢(xún).七 QBC離線查詢(xún).21QueryByExample(QBE)一 實(shí)例代碼.第22課Query.list與 te(不太重要)一 te查詢(xún)數(shù)據(jù).二 query.list()和 te()的區(qū)別.三 兩次query.list()2324hibernate一 Session級(jí)緩存(一級(jí)緩存)二 二級(jí)緩存.1 二級(jí)緩存的配置和使用:.2 二級(jí)緩存的開(kāi)啟:.3 指定二級(jí)緩存產(chǎn)品提供商:.4 使用二級(jí)緩存.5 應(yīng)用范圍.6 二級(jí)緩存的管理:.7 二級(jí)緩存的交互.8 總結(jié).三 查詢(xún)緩存.四 緩存算法.25 數(shù)據(jù)庫(kù)的級(jí)別:并發(fā)性作用。.104 Mysql查看數(shù)據(jù)庫(kù)級(jí)別:.1042 Mysql數(shù)據(jù)庫(kù)修改級(jí)別:.二 事務(wù)概念(ACID)三 事務(wù)并發(fā)時(shí)可能出現(xiàn)問(wèn)題.26hibernate一 悲觀鎖.1 悲觀鎖的實(shí)現(xiàn).2 悲觀鎖的適用場(chǎng)景:.3 實(shí)例:.4 悲觀鎖的使用.5 執(zhí)行輸出SQL語(yǔ)句:.二 樂(lè)觀鎖.1內(nèi)1 Hibernate原理模擬-什么是O/RMap以及為什么要有O/RMap 常風(fēng)的O/R框架4 Hibernate基礎(chǔ)配5 Hibernate接口介6 對(duì)象的三種狀7 ID生成策8 關(guān)系映9 Hibernate查詢(xún)10 在Struts基礎(chǔ)上繼續(xù)完美11 性能優(yōu)12 補(bǔ)充話2HibernateUML31 先脈絡(luò),后細(xì)2 先操作、后原3 重Annotation,輕xml配置文JPAEJB3Hibernate–41 hibernate-distribution-3.3.2.GA-hibernate-annotations-slf4j- (hibernate2 文3 hibernateannotateon5準(zhǔn)1 hibernate3.3.22 hibernate-annotations-3.4.0 注意閱讀hibernatecompatibilitymatrix slf4j1.5.86Hibernate1 建立新的java項(xiàng)目,名為hibernate_0100_2 學(xué)習(xí)建立User-liberary-hibernate,并加入相應(yīng)的jar項(xiàng)目右鍵-buildpath-configurebuildpath-addUser-librarylibrary,命名為libraryhibernatejarSlf-3 引入mysql的JDBC驅(qū)動(dòng)4 在mysql中建立對(duì)應(yīng)的數(shù)據(jù)庫(kù)以及CreateCreatetableStudent(idintprimarykey,namevarchar(20),ageint);5 建立hibernate配置文件6 建立Student7 建立Student映射文件8 將映射文件加入到9 寫(xiě)測(cè)試類(lèi)Main,在Main中對(duì)Student對(duì)象進(jìn)行直接的測(cè)[java]view1.public voidmain(String[] Configuration SessionFactory Sessionsession Student *org.hibernate.cfg.Configuration*hibernate配置文件(perties)的.*new Configuration()默認(rèn)是*所以使用 來(lái)hibernate.cfg.xml配置文cfg= ***SessionFactorysf= trysessionweb//sessionconcation,session//sessionsession. hibernate JDBC hibernate} (HibernateException } }}1 newConfiguration().configure().buildSessionFactory(), org.hibernate.cfg.Configuration*hibernate配置文件(perties)*newConfiguration()默認(rèn)是*newConfiguration().configure();來(lái)hibernate.cfg.xml注意:在hibernate里的操作都應(yīng)該放在事務(wù)7Annotation本W(wǎng)orldhibernate3.0 創(chuàng)建teacher表,createtableteacher(idintprimarykey,namevarchar(20),titlevarchar(10));2 創(chuàng)建Teacher[java]view Teacher int String String//設(shè)置主鍵使用 int return void {this.id String return void{ String return void{this.title 1 在hibernatelibrary中加入annotation的jarHibernateannotationsEjb3persistencemonannotations注意文檔中沒(méi)有提 mon-2 參考Annotation文檔建立對(duì)應(yīng)的注[java]view Teacher Teacher int String String//設(shè)置主鍵使用 int return void this.id String return void String return void title)this.title 1 在hibernate.cfg.xml中建立映射<ma<map注意:<map>中使用的是class屬性,而不是resource屬性,并且使2 參考文檔進(jìn)[java]view void Teacher t.setTitle(" org.hibernate.cfg.AnnotationConfigurationConfiguration,Annotation Configurationcfg SessionFactorysf Sessionsession 1 后不給提解決方法:windows→Proferences→seach“ContentAssist”Auto-Activation———————————————————————————————————————————————————————————————————————————————————————————8O/R一 定義ORM(ObjectRelationalMap)---是一種為了解決面向?qū)ο笈c關(guān)系型數(shù)據(jù)庫(kù)存在的互不匹配的現(xiàn)象的技術(shù)。簡(jiǎn)單說(shuō):ORM一 Hibernate的創(chuàng)人Gavin二 Hibernate做么1 就是將對(duì)象模型(實(shí)體類(lèi))的東西存入關(guān)系模型中2 實(shí)體中類(lèi)對(duì)應(yīng)關(guān)系型庫(kù)中的一個(gè)表3 實(shí)體類(lèi)中的一個(gè)屬性會(huì)對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫(kù)表中的一個(gè)4 實(shí)體類(lèi)的一個(gè)實(shí)例會(huì)對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫(kù)表中的一條記錄%%將對(duì)象數(shù)據(jù)保存到數(shù)據(jù)庫(kù)、將數(shù)據(jù)庫(kù)數(shù)據(jù)讀入到對(duì)象OOP---面向?qū)ο蟮拈_(kāi)就是阻抗不匹配。Hibernate三 Hibernate存在原因1 解決阻抗不匹配的問(wèn)題2 目前不存在完整的面向?qū)ο蟮臄?shù)據(jù)庫(kù)(目前都是關(guān)系型數(shù)據(jù)庫(kù)3 JDBC操作數(shù)據(jù)庫(kù)很繁4 SQL語(yǔ)句編寫(xiě)并不是面向?qū)? 可以在對(duì)象和關(guān)系表之間建立關(guān)聯(lián)來(lái)簡(jiǎn)化編6 O/RMap簡(jiǎn)化編7 O/RMap數(shù)據(jù)庫(kù)平8 hibernate_0200_OR_Map四 Hibernate的優(yōu)點(diǎn) 可以了,就可以能夠、更新、刪除、加載對(duì)象,可以提高生產(chǎn)效; 4、Hibernate承Hibernate中的任何類(lèi)、實(shí)現(xiàn)任何接口,只是個(gè)純粹的單純對(duì)象—稱(chēng)為POJO對(duì)象(最純粹的對(duì)象—這個(gè)對(duì)象沒(méi)有繼承第框架的任何類(lèi)它的任何接5、Hibernate6 Hibernate代碼測(cè)試方便五 Hibernate使用圍Hibernate(O/SQL9Hibernate習(xí)Hibernate的對(duì)象關(guān)系映一、對(duì)象---關(guān)系映射模 二、常用O/R映射框架1 2 JDO(是SUN一套標(biāo)準(zhǔn)—Java數(shù)據(jù)對(duì)象 Toplink(Orocle公司的)5 EJB(2.0X中有CMP;3.0X提出了一套“Java持久化API”---6、IBatis(JDBC說(shuō)不是O/R映射框架,而是基于SQL的映射(提供了一套配置文件,把SQL語(yǔ)句配置到文件中,再配置一個(gè)對(duì)象進(jìn)去,只要配置文件時(shí),就可得到對(duì)象))7 JAP(是SUN公司的一套標(biāo)準(zhǔn)10HibernateOR測(cè)試驅(qū)動(dòng)開(kāi)一項(xiàng)目名hibernate_0200_OR_Map二 原代[java]viewTest staticvoid args)throws Student Sessionsession SessionSession[java]viewSession Session tableName Map<String,String>cfs cfs.put("_id",cfs.put("_name",cfs.put("_age",methodNames void throwsString createSQL();//SQLConnectionconn PreparedStatementps for(int methodNames.length;Methodm=s.getClass().getMethod(methodNames[i]);//返回一個(gè)Method對(duì)象,它反映此Class對(duì)象所Classr=m.getReturnType();//返回一個(gè)Class對(duì)象,該對(duì)象描述了此Method對(duì)象所表示的方法的正式{參數(shù)都隨需服從方法調(diào)用轉(zhuǎn)換 returnValueps.setString(i }if(r.getName().equals("int")) returnValue + }{ returnValue ps.setString(i } +}} String String int for(String v.substring(1);// ="get" getter } - for(int str2 -String ++str1 return11Hibernate配 介紹MYSQL的圖形化客戶端3 4 搭建日志環(huán)境并配置顯示DDL語(yǔ)5 搭建Junit環(huán)Junit ehibernate.cfg.xml:show_sql7 8 表名和類(lèi)名不同,對(duì)表名進(jìn)行配Xml:9 字段名和屬性相默認(rèn)為Xml10 字段名和屬性名不Xml:11 不需要psersistence的字Xml:12 映射日期與時(shí)間類(lèi)型,指定時(shí)間精Xml:13 映射枚舉類(lèi)Xml:14 字段映射的位置(field或者get方法Bestpractice:fieldget/set15 16 課外:CLOBBLOB類(lèi)型的數(shù)據(jù)存17 課外:Hibernate自定義數(shù)據(jù)類(lèi)18 Hibernate類(lèi)MYSQL圖形化客戶SessionFactoryschemaDDLcreate-dropSessionFactorydropschema.取值validate|update|create|create-drop四、搭建日志環(huán)境并配置顯DDL語(yǔ)slflog4j1 首先引入log4j的jar包(log4j- Junit1Junit類(lèi)庫(kù)jar(junit-2、在項(xiàng)目名上右鍵→new→SourceFolder→輸入名稱(chēng)3、注意,你對(duì)哪個(gè)包進(jìn)試,你就在測(cè)試下建立和那個(gè)包相同的[java]view 1.public TeacherTest{ staticSessionFactory =null; static sf= @Test// voidTeacher t.setTitle("Session @AfterClass//Junit static ehibernate.cfg.xmlSQLorg.hibernate.SQLlogcategorydebug。取值:true|falsehibernate.cfg.xmllogconsoleSQL取值true|falseTrue式:[java]view DEBUG table id nametitleprimary False樣式[java]view16:33:40,484DEBUGSchemaExport:377-createtableTeacher(idintegernotnull,namevarchar(255),titlevarchar(255),primarykey(id))八、表名和類(lèi)名不同,對(duì)表名進(jìn)行配Annotation:@Table(name=”tableName[java]view Teacher Id,getXXX Teacher}[java]view name="Student"段名和屬性相Annotation:默認(rèn)為注意:如果在成員屬性沒(méi)有加入任何注解,則默認(rèn)面加入了Xml段名和屬性名不Annotation:使用@Column(name=”columnName”)進(jìn)行注[java]view Teacher Teacher{ int String Stringtitle;//設(shè)置主鍵使用 int return @Column(name="_name")// String return [java]view name="name"十一、不需要(持久化)psersistence的字Annotation:使用@Transient進(jìn)行注解就可以了。[java]view String return4.Xml:十二、映射日期與時(shí)間類(lèi)型,指定時(shí)間精TemporalTypeTemporalType.TIMESTAMP表示yyyy-MM-dd 表示yyyy-MM- 表示[java]view Date return4.注意:當(dāng)使用注解時(shí),屬性為value時(shí),則這個(gè)屬性名可以省略,例如Xml:typehibernate[java]view name="birthDate"注意:hibernate:date,time,timestamp,當(dāng)然您Java十二枚舉類(lèi)其中EnumType有二個(gè)值:①EnumType.STRING RDINAL表示將枚舉所對(duì)應(yīng)的數(shù)值存入數(shù)據(jù)Xml:12hibernate對(duì)象packagecom.wjt276.hibernate;importorg.hibernate.cfg.AnnotationConfiguration;importorg.hibernate.cfg.Configuration;importHibernatehbmAnnotationCopy@author@version1.0publicclasportDBpublicstaticvoidmain(String[]/*org.hibernate.cfg.Configuration*hibernate配置文件(perties)*newConfiguration()默認(rèn)是*newConfiguration().configure();來(lái)hibernate.cfg.xmlConfigurationcfg=new/*org.hibernate.tool.hbm2ddl.SchemaExport*Configuration*SchemaExportexport=/***第一個(gè)參數(shù):scriptDDL*第二個(gè)參數(shù):exportexport.create(true,運(yùn)行剛剛建立的ExportDB類(lèi)中的main()方法,進(jìn)行實(shí)際的導(dǎo)出類(lèi)13ID策Xml被映射的類(lèi)必須定義對(duì)應(yīng)數(shù)據(jù)庫(kù)表主鍵字段。大多數(shù)類(lèi)有一個(gè)JavaBeans風(fēng)格<id> nametypeHibernatehibernatehbernate(integer,long,short,float,double,character,byte,boolean,yes_no,true_false)length(typevarcharcolumnnameunsaved-value(sensible)例和從以前的session中裝載過(guò)(可能又做過(guò)修改--譯者注)但未再次持久化access(可選-默認(rèn)為property):Hibernate用來(lái)屬性值的策略。如果nameunsaved-valueHibernate3還有一個(gè)另外的<composite-id>定義可以舊式的多主鍵數(shù)據(jù)。我們強(qiáng)烈不<generator>元素(主鍵生成策用來(lái)為該持久化類(lèi)的實(shí)例生成唯一的標(biāo)識(shí)。如果這個(gè)實(shí)例需要某些配置值或者初始化參數(shù),用<param>元素來(lái)傳遞。<idname="id"type="long"<generator<param所有的都實(shí)現(xiàn)org.hibernate.id.IdentifierGenerator接口。這是一Hibernate提供了很多內(nèi)置的實(shí)現(xiàn)。下面是一些內(nèi)置的快捷名字:long,shortint張表中插入數(shù)據(jù)時(shí)才能使用。在集群下不要使用。對(duì)DB2,MySQL,MSSQLServer,Sybase和Hy 支持。返回的標(biāo)識(shí)符是long,short或者int類(lèi)型的。(數(shù)據(jù)庫(kù)自增)DB2,PostgreSQL,Oracle,SAPDB,McKoi(sequence),而在Interbase中使用(generator)。返回的標(biāo)識(shí)符是long,short或者intlong,short或者int一個(gè)表和字段(默認(rèn)分別是hibernate_unique_key和next_hi)作為值的來(lái)源。高/低位算法生成的標(biāo)識(shí)符只在一個(gè)特定的數(shù)據(jù)庫(kù)中是唯一的。long,shortint用一個(gè)128-bit的UUID算法生成字符串類(lèi)型的標(biāo)識(shí)符,這在一個(gè)網(wǎng)絡(luò)中是唯一的(使用了IP地址)。UUID被編碼為一個(gè)32位16進(jìn)制數(shù)字的字符串,它hibernateUUID包含:IP地址,JVM的啟動(dòng)時(shí)間(精確到1/4秒),系統(tǒng)時(shí)間和一個(gè)計(jì)數(shù)器值(在JVM中唯一)。Java代碼中不可能獲得MAC地址或者內(nèi)存地址,JNIMSSQLServer和MySQLGUID根據(jù)底層數(shù)據(jù)庫(kù)的能力選擇identity,sequence或者h(yuǎn)ilo中的一個(gè)。(數(shù)據(jù)庫(kù)save()<generator>元素沒(méi)有使用另外一個(gè)相關(guān)聯(lián)的對(duì)象的標(biāo)識(shí)符。通常和<one-to-one>使用annotateonStrategy有四個(gè)值 、AUTOidentitycolumnsequencenative 、TABLEid 、IDENTITY-identity 、SEQUENCE-注意:auto是默認(rèn)值,也就是說(shuō)沒(méi)有后的參數(shù)則表示為1、AUTO默publicintgetId(){return}或publicintgetId(){return}1 對(duì)于mysql,使用2 對(duì)于oracle使用hibernate_sequence(名稱(chēng)固定2、publicintgetId(){return}對(duì)DB2,MySQL,MSSQLServer,Sybase和Hy 支持。返回的標(biāo)識(shí)符是long,short或者int類(lèi)型的。(數(shù)據(jù)庫(kù)自增)注意:此生成策略不支持3、publicintgetId(){return}DB2,PostgreSQL,Oracle,SAPDB,McKoi(sequence),而在Interbase中使用(generator)。返回的標(biāo)識(shí)符是long,short或者int注意:此生成策略不支持4Oracle指定定義的參數(shù)注意:SEQ_Name:SequenceSEQ_DB_Name:SequencepublicclassTeacher{})參數(shù):strategy:GenerationType.SEQUENCEpublicclassTeacher{privateintpublicintgetId()return5、TABLE用表保存idID,然后再給這個(gè)值累加一個(gè)值再次存入數(shù)據(jù)庫(kù),以便下次取Table主鍵生成策略的定義 pkColumnName="pk_key", varchar,keyvalueColumnName="pk_value", 字段名int,value 的第一個(gè)字段的值(keyinitialValue= 策略中使用該記錄的第二個(gè)字段的值(value )createtableGENERATOR_TABLE(pk_keyvarchar(255),pk_valueinteger1。TABLE主鍵生成策略 pkColumnName="pk_key", varchar,keyvalueColumnName="pk_value", 字段名int,value 的第一個(gè)字段的值(keyinitialValue= 策略中使用該記錄的第二個(gè)字段的值(value )publicclassTeacherprivateintid;publicintgetId()return注意:TeacherGENERATOR_TABLEpk_value1,GENERATOR_TABLEtable、pkColumnName、valueColumnName合主1、xml方實(shí)例場(chǎng)景:核算期publicclassFiscalYearPeriodprivateintfiscalYear;//核算年privateintfiscalPeriod;privateDatebeginDate;privateDateendDate;//結(jié)束日期privateStringperiodSts;//狀態(tài)publicintgetFiscalYear(){return}publicvoidsetFiscalYear(intfiscalYear){this.fiscalYear=fiscalYear;}publicintgetFiscalPeriod(){ returnfiscalPeriod;}publicvoidsetFiscalPeriod(intfiscalPeriod){this.fiscalPeriod}publicDategetBeginDate(){returnpublicvoidsetBeginDate(DatebeginDate){ this.beginDate=beginDate;}publicDategetEndDate(){returnpublicvoidsetEndDate(DateendDate){ this.endDate=endDate;}publicStringgetPeriodSts() returnpublicvoidsetPeriodSts(StringperiodSts){this.periodSts=}復(fù)合主鍵的映射,一般情況把主鍵相關(guān)的屬性抽取出來(lái)單獨(dú)放入一個(gè)類(lèi)中。而這個(gè)類(lèi)是有要求的:必需實(shí)現(xiàn)序列化接口(java.io.Serializable)(可以保存到磁盤(pán)上),為了確定這個(gè)復(fù)合主鍵類(lèi)所對(duì)應(yīng)對(duì)象的唯一性就會(huì)產(chǎn)生比較,對(duì)象比較就需要復(fù)寫(xiě)對(duì)象的hashCode()、equals()方法(復(fù)寫(xiě)方法如下),然后在類(lèi)中這個(gè)復(fù)合主鍵類(lèi)復(fù)合主鍵類(lèi)復(fù)合主鍵必需實(shí)現(xiàn)java.io.Serializable接publicclassFiscalYearPeriodPKimplementsjava.io.Serializable{privateintfiscalYear;//核算年privateintfiscalPeriod;//核算月publicintgetFiscalYear(){return}publicvoidsetFiscalYear(intfiscalYear)this.fiscalYear=}publicintgetFiscalPeriod(){returnfiscalPeriod;}publicvoidsetFiscalPeriod(intfiscalPeriod){this.fiscalPeriod=fiscalPeriod;}publicinthashCode()finalintprime=31;intresult=1;result=prime*result+fiscalPeriod;result=prime*result+fiscalYear;returnresult;}publicbooleanequals(Objectobj){if(this==obj)returntrue;if(obj==null)returnif(getClass()!=obj.getClass())returnfalse;FiscalYearPeriodPKother=(FiscalYearPeriodPK)obj;if(fiscalPeriod!=other.fiscalPeriod)returnif(fiscalYear!=other.fiscalYear)returnfalse;return實(shí)體類(lèi):(中了復(fù)合主鍵類(lèi))publicclassFiscalYearPeriod{privateFiscalYearPeriodPKfiscalYearPeriodPK;//復(fù)合主類(lèi)privateDatebeginDate;//開(kāi)始日期privateDateendDate;//結(jié)束日期privateStringperiodSts;//狀態(tài)publicFiscalYearPeriodPKgetFiscalYearPeriodPK(){returnfiscalYearPeriodPK;}publicvoidsetFiscalYearPeriodPK(FiscalYearPeriodPKfiscalYearPeriodPK)this.fiscalYearPeriodPK=}FiscalYearPeriod.hbm.xml映射文<hibernate-map<composite-id<key-property<key-property</composite-<property<property<property</hibernate-map導(dǎo)出數(shù)據(jù)庫(kù)輸出SQL語(yǔ)句createtablet_fiscalYearPeriod(fiscalYearintegernotnull,fiscalPeriodintegernotnull,beginDatedatetime,endDatedatetime,periodStsvarchar(255),primarykey(fiscalYear,fiscalPeriod))//實(shí)體數(shù)據(jù)庫(kù)表結(jié)構(gòu)復(fù)合主鍵關(guān)聯(lián)映射數(shù)據(jù)tx=session.beginTransaction();FiscalYearPeriodfiscalYearPeriod=newFiscalYearPeriodPKpk=newFiscalYearPeriodPK();fiscalYearPeriod.setFiscalYearPeriodPK(pk);//鍵fiscalYearPeriod.setEndDate(newDate());fiscalYearPeriod.setBeginDate(newDate());執(zhí)行輸出SQL語(yǔ)句Hibernate:insertintot_fiscalYearPeriod(beginDate,endDate,periodSts,fiscalYear,fiscalPeriod)values(?,?,?,?,?)數(shù)據(jù)的加載2、annotation方下面是定義組合主鍵的幾種語(yǔ)將類(lèi)注解為@IdClass,并將該實(shí)體中所有屬于主鍵的屬性都注解為publicclassTeacherPKimplementsjava.io.Serializable{privateintid;privateStringpublicintgetId(){return publicvoidsetId(intid){this.id=id;}publicStringgetName(){ returnname;}publicvoidsetName(Stringname){ =name;}publicbooleanequals(Objecto){ publicinthashCode(){return }將組件類(lèi)的屬性注解為@Id,實(shí)體類(lèi)中組件的publicclassTeacher{privateTeacherPKpk;privateStringpublicTeacherPKgetPk(){returnpk;將組件的屬性注解為publicclassTeacher{privateTeacherPKpk;privateStringpublicTeacherPKgetPk(){returnpk;類(lèi)注解為@IdClass,主鍵的屬性都注解為@Id需要將復(fù)合主鍵類(lèi)建立好,不需要進(jìn)行任何注解在實(shí)體類(lèi)中不需要進(jìn)行復(fù)合主鍵類(lèi)的classpublicclassTeacher{//privateTeacherPKpk;//不再需要privateintid;privateStringname;publicintgetId(){return publicvoidsetId(intid){this.id= publicStringgetName(){returnpublicvoidsetName(Stringname){=第14課Hibernate開(kāi)發(fā)接口(作用:進(jìn)行配置信息的管目標(biāo):用來(lái)產(chǎn)生configurehibernate加載默認(rèn)的hibernate配置文件sessionFactory=加載指定hibernate的配置文只需要關(guān)注一個(gè)方法作用:主要用于產(chǎn)生Session的工廠(數(shù)據(jù)庫(kù)連接池當(dāng)它產(chǎn)生一個(gè)Session時(shí),會(huì)從數(shù)據(jù)庫(kù)連接池取出接,交給這Sessionsession= Session兩方法的區(qū)別①、openSession是每次都打開(kāi)一個(gè)新的Session②、OpenSessionclose,③、getCurrentSession上下文<property常用的是:①、thread:是從上下文找、只有當(dāng)前沒(méi)SessionSession,②、jta:ApplicationServer(Tomcat③、managed:④、custom.Class:1 管理一個(gè)數(shù)據(jù)庫(kù)的任務(wù)單2 3 ObjectTransistent4 格式Session.load(Classarg0,Serializablearg1)throws*arg0:需要加載對(duì)象的類(lèi),例如*arg1: hibernate1此方法返回類(lèi)型為Object,但返回的是對(duì)象SQLloadlazy(SQL*hibernate延遲加載實(shí)現(xiàn)原理是方式trysession=sf.openSession();UseruserSQLSystem.out.println("="+userpersistent。user.setName("}catch(HibernateExceptione){}if(session!=}}}5 格式:Session.get(Classarg0,Serializablearg1)方*arg0:需要加載對(duì)象的類(lèi),例如*arg1: 是基數(shù)類(lèi)型,則hibernate會(huì)自動(dòng)轉(zhuǎn)換成包裝類(lèi),如1Object,也就是對(duì)象,然后我們?cè)購(gòu)?qiáng)行轉(zhuǎn)trysession=sf.openSession();SQLUserUseruser=(User)session.get(User.class,persistentSystem.out.println("="+步

userpersistentuser.setName("}catch(HibernateExceptione){}if(session!=}}6 load()與get()區(qū)②、load返回的是對(duì)象,等到真正使用對(duì)象的內(nèi)容時(shí)才發(fā)出sql語(yǔ)句,sessionopen③、getget()和load()只根據(jù)主鍵查詢(xún),不能根據(jù)其它字段查詢(xún),如果想根據(jù)非主鍵查詢(xún),可以使用HQL7 detachedpersistent transient persistentsession 1:update/updatablexml:設(shè)定<property>的update屬性,設(shè)置在更新時(shí)是否參數(shù)更<propertyname="name"注意:updatetrue(默認(rèn)):參與更新;false:publicStringgetTitle(){return方法二:dynamic-update注意:此方法目前只適合x(chóng)ml方式,JAP1.0annotation沒(méi)有對(duì)應(yīng)在實(shí)體類(lèi)的映射文件中的<class>中,使用dynamic-update屬性,true:session(session),session<classname="com.bjsxt.Student"dynamic-代碼publicvoidtestUpdate5()Students=(Student)session.get(Student.class,1);namespersistentspersistent態(tài)session2.getTransaction().commit();}session.merget()方法,合并字段內(nèi)容publicvoidtestUpdate6()Students=(Student)session.get(Student.class,1); publicvoidtestUpdate7()Queryq"updateS='z5'wheres.id=1");}8 update,save9 session如果沒(méi)有,才會(huì)去數(shù)據(jù)庫(kù)查找,clear()方法可以強(qiáng)制清除session存Teachert=(Teacher)session.load(Teacher.class,1);Teachert2=(Teacher)session.load(Teacher.class,1);注意:這樣就會(huì)發(fā)出兩條SELECT語(yǔ)句,如果把session.clear()去除,則只會(huì)發(fā)出一條SELECT語(yǔ)句,因?yàn)榈诙蝜oad時(shí),是使用session緩存中ID1load10在hibernate中也存在flush這個(gè)功能,在默認(rèn)的情況下 前時(shí),其實(shí)執(zhí)行了一個(gè)flush命令。Session.flush功能 insert、deleteSQLSession在什么情況下執(zhí)行 注意:flush時(shí),可以自己設(shè)定,使用session.setFlushMode(FlushMode)來(lái)指FlushMode的枚舉值 FlushMode.ALWAYS:SQLflush flush( MIT:只有在commit時(shí)才flush FlushMode.MANUAL:手動(dòng)flush。 FlushMode.NEVER:不flush 比如session取數(shù)據(jù)為只讀時(shí)用,這樣就注意:設(shè)置flush模式時(shí),需要在session開(kāi)啟事務(wù)之前置 在執(zhí)行查詢(xún)前,如 注:如果主鍵生成策略是uuid等不是由數(shù)據(jù)庫(kù)生成的,則session.save()時(shí)并不會(huì)發(fā)出SQL語(yǔ)句,只有flush時(shí)才會(huì)發(fā)出SQL語(yǔ)句,但如果主鍵生成策略nativesession.saveSQL11例如但是commit時(shí)使用,會(huì)拋出異常session=HibernateUtils.getSession();tx=session.beginTransaction();User1user=newUser1(); user.setCreateTime(newDate());user.setExpireTime(newuuid,saveusersessioninsertid,sessionexistsInDatabasesession.evict(user);//session(EntityEntrieshibernatesession(insertions)userinsertentityEntriesexistsInDatabasetrue,evictusersession解決在逐出session緩存中的對(duì)象不拋出異常的方法//flushhibernateuserexistsInDatabasefalsesession.evict(user);//session(EntityEntriesuserinsertsessionexistsInDatabase15狀時(shí)對(duì)象(Transientnew是說(shuō)它們沒(méi)有任何跟數(shù)據(jù)庫(kù)表相關(guān)聯(lián)的行為,只要應(yīng)用不再這些對(duì)象(不再被任何其它對(duì)象所),它們的狀態(tài)將會(huì)丟失,并由回收機(jī)制回收久化對(duì)象(Persistent持久實(shí)例是任何具有數(shù)據(jù)庫(kù)標(biāo)識(shí)的實(shí)例,它有持久化管理器Session統(tǒng)一管理,持久實(shí)例是在事務(wù)中進(jìn)行操作 它們的狀態(tài)在事務(wù)結(jié)束時(shí)同數(shù)據(jù)庫(kù)線對(duì)象(Detachedhibernate種狀態(tài)的區(qū)分1 有沒(méi)有ID,(如果沒(méi)有則是Transient狀態(tài)2 ID在數(shù)據(jù)庫(kù)中有沒(méi)3 在內(nèi)存里有沒(méi)有(session緩存結(jié)Transient對(duì)象:隨時(shí)可能被回收器回收(在數(shù)據(jù)庫(kù)中沒(méi)有于之對(duì)應(yīng)的記session內(nèi)存中一個(gè)象,沒(méi)有ID,緩存中也沒(méi)內(nèi)存中有、存中有、數(shù)據(jù)庫(kù)有Detached對(duì)象:也可能被回收器回收掉(數(shù)據(jù)庫(kù)中存在對(duì)應(yīng)的記錄,只是沒(méi)有任何對(duì)象它是指session),注引狀態(tài)經(jīng)過(guò)Persistent狀態(tài),沒(méi)session內(nèi)存有、緩存沒(méi)有、數(shù)據(jù)庫(kù)有16 存在以下關(guān)系1 一對(duì) 3 多對(duì) 4 多對(duì) 5 集合映 7 組件映 對(duì)一關(guān)聯(lián)映 兩個(gè)對(duì)象之間是一對(duì)一的關(guān)系,如-IdCard(人— 間的一一對(duì)應(yīng)的關(guān)系;數(shù)據(jù)庫(kù)表不會(huì)有額外的字段來(lái)它們之間的關(guān)系,僅 實(shí)體類(lèi)/**人-實(shí)體類(lèi)*/publicclass{privateintid;privateStringname;publicintgetId(){returnid; publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=}publicclassIdCardprivateintid;privateStringcardNo;publicintgetId(){returnpublicvoidsetId(intid){this.id=id;}publicStringgetCardNo(){returnpublicvoidsetCardNo(StringcardNo){this.cardNo=}(一)唯一外鍵關(guān)聯(lián)-單向 1明人—->號(hào)(àIdCard),從IdCard看不到對(duì)2象模需要在類(lèi)中持有IdCard的一個(gè)idCard,則IdCard中沒(méi)有3系模idcard4體類(lèi)注:IdCard是被對(duì)象,沒(méi)有變化/**人-實(shí)體類(lèi)publicclassprivateintid;privateStringname;privateIdCardidCard;//IdCard對(duì)publicintgetId(){returnid; publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}publicIdCardgetIdCard(){returnidCard;}publicvoidsetIdCard(IdCardidCard){this.idCard=}5xmlIdCard實(shí)體類(lèi)的映射文件因?yàn)镮dCard是被的,所以沒(méi)有什么特殊的映<hibernate-map<classname="com.wjt276.hibernate.IdCard"<idname="id"<generator<property</hibernate-map實(shí)體類(lèi)的映射文件在映射時(shí)需要添加一個(gè)外鍵的映射,就是指定IdCard的引<hibernate-map<classname="com.wjt276.hibernate." <idname="id"<generator<property<!--<many-to-one>:在多的一端(當(dāng)前一端),加入一個(gè)外鍵(當(dāng)前為idCard)IdCard),unique="true",這樣就可以此字段唯一了。--><many-to-onename="idCard"</hibernate-map注意:這里的<many-to-one>中的name屬性值并不是數(shù)據(jù)庫(kù)中的字段名,而是實(shí)體類(lèi)中IdCard對(duì)象成員屬性的getxxx方法后面的xxx(此處是getIdCard,所以是idCard),要求第一個(gè)字段小寫(xiě)。如果不指定columnname6annotateon解映注意IdCard是被對(duì)象,除正常注解,無(wú)需要其它注/**publicclassIdCard{privateintid;privateStringcardNo;publicintgetId(){returnpublicvoidsetId(intid){this.id=id;}publicStringgetCardNo(){returncardNo;}publicvoidsetCardNo(StringcardNo){this.cardNo=} 對(duì)象的實(shí)體類(lèi)需要使用@OneToOne進(jìn)行注解,來(lái)表面是一對(duì)一的關(guān)如果省略@JoinColumnhibernate是:被對(duì)象名稱(chēng)_被對(duì)象的主鍵ID)/***/publicclass{privateintid;privateIdCardidCard;//IdCard對(duì)privateStringname;publicintgetIdreturnid;}publicIdCardgetIdCard(){returnidCard;}publicStringgetName(){returnname;}publicvoidsetId(intid){this.id=id;}publicvoidsetIdCard(IdCardidCard){this.idCard=idCard;}publicvoidsetName(Stringname){=name;}}7成的SQL句createtableIdCardidintegernotnullauto_increment,cardNovarchar(255),primary)createtableidintegernotnullauto_increment,primarykey(id))alteraddindexFK8E488775BE010483(idCard),addconstraintFK8E488775BE010483foreignkey(idCard)//外鍵referencesIdCard(id)//IdCard的id字8、測(cè)Sessionsession=IdCardidCard=newIdCard(); idCard,TransientidCard=new();.setName(" 一外鍵關(guān)聯(lián)-雙1明人<—->號(hào)(<->IdCard)雙向:互相持有對(duì)方的2、對(duì)象模型:3系模型4體類(lèi)實(shí)體類(lèi),只是相互持有對(duì)象的,并且要求getter和setter方5xml實(shí)體類(lèi)映射文件:同單向的沒(méi)有變化IdCard體類(lèi)映射文件:如果使用同樣的方法映射,這樣就會(huì)在表中也添加一hibernateIDID了。也同樣需要使用<one-to-one>來(lái)映射,但是需要使用property-ref屬性來(lái)指定對(duì)象持有你自己的的成員屬性名稱(chēng)(是gettxxxx后面的名稱(chēng)),這hibernate<classname="com.wjt276.hibernate.IdCard"<idname="id"<generator<property<!--<one-to-one>:告訴hibernate如何加載其關(guān)聯(lián)對(duì)property-ref<one-to-onename=""property-一對(duì)一唯一外鍵關(guān)聯(lián)映射雙向需要在另一端(當(dāng)前IdCard),添加<one-to-one>,指示hibernate如何加載其關(guān)聯(lián)對(duì)象(或?qū)ο?,默認(rèn)根據(jù)主鍵 <!--<one-to- hibernateproperty-ref6、annotateon解映射注解映射同單向一樣IdCard解映射如下:使用@OneToOnepublicclassIdCard{privateintid;privateStringcardNo;private//mappedBy:在指定當(dāng)前對(duì)象在被對(duì)象的idCard做了映射//此值:當(dāng)前對(duì)象持有對(duì)象中當(dāng)前對(duì)象的成員屬性名稱(chēng)(getXXX后//因?yàn)閷?duì)象的持有IdCard對(duì)象的方法是getIdCard()因?yàn)樾枰猧dCardpublicget publicvoidset(){this. publicintgetId(){returnpublicvoidsetId(intid){this.id=id;}publicStringgetCardNo(){returncardNo;}publicvoidsetCardNo(StringcardNo){this.cardNo=}7SQL要相互加載對(duì)方,這由hibernate來(lái)完成。因?yàn)樯傻膕ql語(yǔ)句同單向一樣8、測(cè)試9結(jié)鍵關(guān)聯(lián)-單向(不重系;數(shù)據(jù)庫(kù)表不會(huì)有額外的字段來(lái)它們之間的關(guān)系,僅通過(guò)表的主鍵來(lái)關(guān)1明人—->號(hào)(àIdCard),從IdCard看不到對(duì)2象模3系模因?yàn)槭莍dcard,所以idcard要求先有值。而的主鍵值不idcard4體類(lèi)實(shí)體類(lèi)同一對(duì)一唯一外鍵關(guān)聯(lián)的實(shí)體類(lèi)一個(gè), 對(duì)象中持有對(duì)象的(代碼見(jiàn)唯一外鍵關(guān)系)5、xml射IdCard映射文件,先生成<classname="com.wjt276.hibernate.IdCard"<id<generator<property實(shí)體類(lèi)映射文件,ID是根據(jù)IdCard主鍵值<classname="com.wjt276.hibernate. <idforeign使用。再使用元素<param>的屬性值指定相關(guān)聯(lián)對(duì)象(這里相關(guān)聯(lián)的對(duì)idCard,idCardid)為了能夠在加載數(shù)據(jù)同時(shí)加載IdCard數(shù)據(jù),所以需要使用一個(gè)<one-to-one>來(lái)設(shè)置這個(gè)功能。--><generator<!--元素<param>nameproperty--<param<property<!--<one-to-表示如何加載它的對(duì)象(這里對(duì)象就指idCard這里nameidCard),同時(shí)也說(shuō)是一對(duì)一的關(guān)系。默認(rèn)方式是根據(jù)主鍵加載(把中的主鍵取出再到IdCard中來(lái)取相關(guān)IdCard數(shù)據(jù)。)我們也此鍵也作為一個(gè)外鍵了IdCard,所以需要加一個(gè)數(shù)據(jù)庫(kù)限制(外鍵約 6、annotateon解映射實(shí)體類(lèi)注解publicclassprivateintprivateIdCardidCard;//IdCard對(duì)privateStringname;publicintgetId()returnid;}publicIdCardgetIdCard(){returnidCard;}publicStringgetName(){returnname;}publicvoidsetId(intid){this.id=id;}publicvoidsetIdCard(IdCardidCard){this.idCard=idCard;}publicvoidsetName(Stringname){=name;}}IdCard實(shí)體類(lèi),不需要持有對(duì)象的,正常注解就可以了7SQLcreatetableIdCardidintegernotnullauto_increment,primarykey)createtableidintegernotnull,primarykey(id))alteraddindexFK785BED805248EF3(id),addconstraintFK785BED805248EF3foreignkey(id)referencesidcard8、測(cè)session=HibernateUtils.getSession();tx=session.beginTransaction();IdCardidCard=newIdCard(); =new();.setName("TransientObjectExceptioncascade 9ID<id idcard,idCard<generator<param<property<!—one-to-one的含義:指示hibernate怎么加載它的關(guān)聯(lián)對(duì)象,默認(rèn)根 外鍵參照了idCard--><one-to-onename="idCard"鍵關(guān)聯(lián)-雙向(不重系;數(shù)據(jù)庫(kù)表不會(huì)有額外的字段來(lái)它們之間的關(guān)系,僅通過(guò)表的主鍵來(lái)關(guān)主鍵關(guān)聯(lián)映射,實(shí)際是數(shù)據(jù)庫(kù)的結(jié)構(gòu)并沒(méi)有變化,只是要求雙方都可以持有對(duì)象,也就是說(shuō)實(shí)體模型變化,實(shí)體類(lèi)都相互持有對(duì)方。1xml實(shí)體類(lèi)映射文件不變,IdCard如下<classname="com.wjt276.hibernate.IdCard"<idname="id"<generatorclass="native"/><property <one-to-onename="2annotateon解映射的注解不變,同主鍵單向注解IdCard注解,只需要在持有對(duì)象的getXXX前加@OneToOne(mappedBy="idCard")publicclassIdCardprivateintid;privateStringcardNo;privatepublicget(){ (五)聯(lián)合主鍵關(guān)聯(lián)(Annotation方式{})publicWifegetWife()return}@JoinColumnreferencedColumnName二、component(組件)關(guān)聯(lián)映Component聯(lián)映射 以上關(guān)系的映射稱(chēng)為component(組件)關(guān)聯(lián)映 ponent可以成為是值對(duì)象(DDD)。User體類(lèi)publicclassUser{privateintid;privateStringprivateContactcontact;//值對(duì)象的publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetName() returnpublicvoidsetName(Stringname){ =name;}publicContactgetContact(){ returncontact;}publicvoidsetContact(Contactcontact){ this.contact=}Contact對(duì)象publicclassContact{privateString;privateStringaddress;privateStringzipCode;privateStringcontact;publicStringget returnpublicvoidset(String){ this.=;}publicStringgetAddress(){returnaddress;}publicvoidsetAddress(Stringaddress){this.address=address;}publicStringgetZipCode(){returnzipCode;}publicvoidsetZipCode(StringzipCode){this.zipCode=zipCode;}publicStringgetContact(){returncontact;}publicvoidsetContact(Stringcontact){this.contact=}(四)xml--User映射文件(組件映<hibernate-map<classname="com.wjt276.hibernate.User"<idname="id"<generator<propertyname="name"<!--<component>用于映射Component(組件)關(guān)系--<component<propertyname="<property<property<propertyname="contact</hibernate-mapannotateon使用@EmbeddedpublicclassUserprivateintid;privateStringname;privateContactcontact;//值對(duì)象的publicintgetId() returnpublicContactgetContact(){returncontact;}publicvoidsetContact(Contactcontact){this.contact=Contact類(lèi)是值對(duì)象,不是實(shí)體對(duì)象,是屬于實(shí)體類(lèi)的某一部分,因此沒(méi)有映出數(shù)據(jù)庫(kù)輸出SQL句createtableUseridintegernotnullauto_increment,addressvarchar(255),contactvarchar(255),varchar(255),zipCodevarchar(255),namevarchar(255),primarykey(id))據(jù)表結(jié)構(gòu)注:雖然實(shí)體類(lèi)沒(méi)有基本聯(lián)系信息,只是有一個(gè),但在映射數(shù)據(jù)庫(kù)時(shí)全部件映射數(shù)據(jù)保存tx=session.beginTransaction();Useruser=newUser();Contactcontact=newContact(); 實(shí)體類(lèi)中值對(duì)象時(shí),不用先保存值對(duì)象,因?yàn)樗皇菍?shí)體類(lèi),它只是一個(gè)session.save()中保存的對(duì)象是實(shí)體類(lèi)。三 多對(duì)一–單場(chǎng)景:hibernate對(duì)應(yīng)于一個(gè)組,所以用戶實(shí)體中應(yīng)該有一個(gè)持有組的。象模型圖系模型聯(lián)映射的本質(zhì)多個(gè)。體User實(shí)體類(lèi)publicclassUser{privateintid;privateStringname;privateGrouppublicGroupgetGroup(){return publicvoidsetGroup(Groupgroup){this.group=group;}publicintgetId(){returnid; publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname) =Group實(shí)體類(lèi)publicclassGroup{privateintid;privateStringname;publicintgetId(){returnpublicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=}實(shí)體類(lèi)建立完后,開(kāi)始創(chuàng)建映射文件,先建立簡(jiǎn)單的映射文件xml式:映射文件1Group體類(lèi)的映射文件<hibernate-map<classname="com.wjt276.hibernate.Group"<idname="id"<generator<property</hibernate-map2User體類(lèi)的映射文件<hibernate-map<classname="com.wjt276.hibernate.User"<idname="id"<generator<property<!--<many-to-one>name:是的屬性(User.group),這樣表示在多的一端表里加入一個(gè)字段名group,這樣這個(gè)字段(groupid)group(t_group一端),也就是就在多的一端加入一個(gè)外鍵指向一的一端。--><many-to-onename="group"</hibernate-map3、※<many-to-one>例如:<many-to-onename="group"<many-to-one>聯(lián)映射對(duì)一的關(guān)name:是的屬性(User.group),這樣表示在多的一端表里加入一個(gè)字段名稱(chēng)group,groupSQL(column="groupid").這樣這個(gè)字段(groupid)group表(t_groupaltertablet_userdropforeignkeyFKCB63CCB695B3B5ACdroptableifexistst_groupdroptableifexistscreatetablet_group(idintegernotnul

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論