原版-馬士兵java框架hibernate學(xué)習(xí)筆記_第1頁(yè)
原版-馬士兵java框架hibernate學(xué)習(xí)筆記_第2頁(yè)
原版-馬士兵java框架hibernate學(xué)習(xí)筆記_第3頁(yè)
原版-馬士兵java框架hibernate學(xué)習(xí)筆記_第4頁(yè)
原版-馬士兵java框架hibernate學(xué)習(xí)筆記_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

(原版)馬java框架hibernate學(xué)習(xí)筆課程內(nèi) ID生成策略(重點(diǎn) 關(guān)系(重點(diǎn) 在Struts基礎(chǔ)上繼續(xù)完善 風(fēng) 資 1. 文 hibernateannotation 環(huán)境準(zhǔn) hibernate-distribution-3.3.2.GA-dist hibernate-annotations-3[1].4.0.GA 3注意閱讀hibernatecompatibilitymatrix(hibernate slf4jl.5.8 引入mysql的JDBC驅(qū)動(dòng) 建立Student 建立Student文件 將文件加入到hibernate.cfg.xml 建立Annotation版本 teacher表,createtableteacheridintprimarykeynamevarhcar(20titlevarchar(lO)創(chuàng)建Teacher 在 ib中加入annotation的jar FAQ:@不給提 WhatisandWhy0/R Sql語(yǔ)句編寫并不是面象 0/RMap簡(jiǎn)化編 0/R Hibernate_0200_OR_Map 0/R 介紹MSQL的圖形化客戶 搭建日志環(huán)境并配置顯示DDL語(yǔ) 搭建jUnit環(huán) 12日期與時(shí)間類型,指定時(shí)間精 13枚舉類型(比較少用 hibernate類 ID生成策 注意 幵發(fā)接口介 HibernateAPI文檔需要單獨(dú).................................................................................................. Query接 三種對(duì)象狀 上一個(gè) 關(guān) (重要 對(duì)象之間的關(guān) —對(duì) —對(duì) 組件..........................................................................................................................................一對(duì)一關(guān) 組 項(xiàng)目 annotation:@Embeddable 多對(duì)一與一對(duì) 多對(duì) 關(guān)聯(lián)關(guān)系中的 要想刪除或者更新先做load,除了精確知道ID之 圾數(shù) 關(guān) 總 CRUD,按照自然的理解即可(動(dòng)手測(cè)試 集 (不太重要 項(xiàng)目名稱:hibernate_1800_Collections_Map.......................................................................... List(與Set差不多多個(gè) 繼 (不太重要 作 設(shè)計(jì) Hibernate查詢(Query HQLvs NativeSQL>HQL.>EJBQL(JPQL1.0)>QBC(QueryByCriteria)>QBE(QueryBy 性能優(yōu) 注意session.clear()的運(yùn)用,尤其在不斷分頁(yè)循環(huán)的時(shí) list和iterate不同之處(//主要為了面試詳見 詳見 課程內(nèi) Hibernate原理模擬-O/RMap以及為什么要有O/R關(guān)系(重點(diǎn) 風(fēng)hibernate–資 . hibernateannotation環(huán)境準(zhǔn) 注意閱讀hibernatecompatibilitymatrix(hibernate slf4jl.5.8Hibernate項(xiàng)目右鍵-buildpath-configurebuildpath-addhibernateslf-nopcreatedatabaseusecreatetableStudent(idintprimarykey,namevarchar(20),agehibernate配置文件建立Student文件newConfiguration().configure().buildSessionFactory(),而不是要省略configure,否則會(huì)出hibernatedialectmustbeset的異常錯(cuò)完建立Annotation版本的teachercreatetableteacher(idintprimarykey,namevarhcar(20),title在hibernaib中加入annotation的jarhibernateannotaionejb3persistencehibernatecommon- FAQ:@WhatisandWhy0/R0/RMap簡(jiǎn)化編0/R 0/RMapa)意愿天Hibernate配介紹MSQL:搭建日志環(huán)境并配置顯示DDL語(yǔ)從 copy査詢hibernatejUnit環(huán)需要注意jUnit的 是否輸SQL語(yǔ) 格式化SQL語(yǔ)句,美化SQL語(yǔ)<!--格式化顯示輸出sql<propertyAnnotation: 12日期與時(shí)間類型,指定時(shí)間精)//@Temporal(TemporalType.DATE)//@Temporal(TemporalType.TIME)<classname="Teacher"table="Teacher"<idname="id"<propertyname="name"type="time"13枚舉類型(比較少用@Enumerated(EnumType.ORDINAL枚舉類型按位置數(shù),如:0,1,2@Enumerated(EnumType.STRING)枚舉類型按設(shè)定值hibernateID<idname="id"<generator常用四個(gè):nativeidentitysequenceAUTO(直接寫@GeneratedValue相當(dāng)如native)Oraclehibernate_sequence(名稱固定名)//在@GeneratedValue中增加generator="teacherSEQ"http://"teacherSEQ_DB"為指定到數(shù)據(jù)庫(kù)生成的Sequence名publicintgetId(){return} //被調(diào)用的TABLE )注:如果使用注解方式的uuid如下:@GenericGenerator(name="teacherUUID",publicclassStudentPKimplements{privateStringid;…publicbooleanequals(Object{if(oinstanceof{StudentPkpk=if(this.id==pk.getId()&&.equals(pk.getName()))return}}return}publicinthashCode()return}<hibernate-map<classname="com.bjsxt.pojo.Student"<key-propertyname="id"></key-<key-propertyname="name"></key-</composite-<propertyname="age"<propertyname="sex"<propertyname="good"</hibernate-map和hashCode方法.@publicclassTeacherPKimplements{privateStringid;…publicclassTeacherpublicTeacherPK{return}…2:@EmbeddedlD(*)pojo類無(wú)需加注解,只需在原pojo類新屬性“TercherPK3:@Id@IdClass(*)pojo類無(wú)需加注解,原pojoid,name屬性保留不變,也無(wú)需新增“TercherPKid,nameget方法前都加@Id,并在原pojo類前加publicclassTeacher{privateStringid;{return}publicString{return}...幵發(fā)接口介HibernateAPI文檔需要單獨(dú)關(guān)注兩個(gè)方法即:openSession<property(b)jta(全稱javatransactionapi)-java分布式事務(wù)管理(多數(shù)據(jù)庫(kù)jta(jbossWebLogictomcat管理一個(gè)數(shù)據(jù)庫(kù)的任務(wù)單元( Students1=(Student)session.load(Student.class, Students1=(Student)session.get(Student.class, xml設(shè)定property的update屬性,annotation設(shè)定@Column的c)使用HQL(EjBQL)(建議) clear方 clearsession 例如:session.setFlushMode(FlushMode.AUTO)newSchemaExport(newAnnotationConfiguration().configure()).create(false,Query比如save和persistiii.比如refresh、lock三種對(duì)象狀 值會(huì)不會(huì)發(fā)出update語(yǔ)句?關(guān)系(重要對(duì)象之間的關(guān)下列關(guān)系之一時(shí),數(shù)據(jù)庫(kù)表該如何,編程上該如何對(duì)待(紅色為重點(diǎn)中的重點(diǎn))增刪改査CRUD怎么組件@一對(duì)一關(guān)publicWifegetWife(){return}xml:xml<many-to-one<class<id<generator<propertyunique="true"是保證生成的字段唯一,這樣<many-to- 也達(dá)到了一對(duì)一的效規(guī)律:凡是雙向關(guān)聯(lián),必設(shè)mappedByHusbandwifegetWife方法)做的publicHusbandgetHusband()return}WifepublicWifegetWife(){return}xml:many-to-oneunique<one-to-oneproperty-其中property-ref相當(dāng)于,xml:one-to-oneidforeign@primaryKeyJoinColumn(不常用,了解 若想要指定生成的外鍵名則需使用@JoinColumns注解,如下:@JoinColumns({@JoinColumn(name="wifeid",referencedColumnName="id"),@JoinColumn(name="wifename",referencedColumnName="name")})@JoinColumns的參數(shù)為@JoinColumn@JoinColumn內(nèi)除需指定name屬性外還需指定referencedColumnName屬性值作用是可指定生成的字段名所對(duì)應(yīng)的目標(biāo)表字段名*/publicWifegetWife(){……}組項(xiàng)目 對(duì)象關(guān)系:一個(gè)對(duì)象是另外一個(gè)對(duì)象的一部annotation:@EmbeddableHusbandwife屬性上建立注這種方式生成的表為husband(id,name,wifename,wifeage),不會(huì)生成wife表.PublicWift}@AttributeOverride注解需要寫在getWife方法上,可以重新指定生成的Wife類組件生成的如:Husband與Wife兩個(gè)類中都有name字段,這樣在生成表的時(shí)候會(huì)有,此時(shí)采用@AttributeOverride注解可以指定Wife類中的name屬性對(duì)應(yīng)新的字段名—“wifename”,不過@AttributeOverride注解不常用,因?yàn)橛蠾ife類)的重復(fù)名稱的屬性上使用如下內(nèi)容以指定新的字段名:publicStringgetName()return}另外,@Embeddable注解好像是寫在分類(Wife類)的類名前的,不過好像不寫publicclassWife{…:<id<generator<property<component<property <property多對(duì)一與一對(duì)name1name11121earn2eataannotaion:只需要在多的一端User屬性group進(jìn)行注解配@JoinColumn(name="groupid")//指定User表中生成與Group對(duì)應(yīng)的字段publicGroup{return}生成的表為user(id,name,groupid),t_group(id,groupname)cascade取值在時(shí)User時(shí),設(shè)置了cascade="all"會(huì)自動(dòng)相應(yīng)的t_group.而不用管user關(guān)聯(lián)的對(duì)象(通常情況下會(huì)優(yōu)先關(guān)聯(lián)的對(duì)象,然后再user).Set<User>users=newHashSet<User>(); //一對(duì)多關(guān)聯(lián)Group是一的一方User是多的一方@JoinColumn(name="groupid指定User表中生成與Group對(duì)應(yīng)的字段名注意此處與多對(duì)一配置publicSet<User> Hibernate默認(rèn)將OneToMany理解為ManyToMany的特殊形式,如果不指定生成的外鍵@JoinColumn(name="groupId"),則會(huì)默認(rèn)生成多對(duì)多的關(guān)系,產(chǎn)生一張中間xml:<set<id<generator<property<set 關(guān)系模型(group一對(duì)多user)Set<User>users=new在多的一端User端配置groupXML配Group<set<keyUser都為Student(id,name)Set<Student>students=newTeacher類中寫:privateSet<Student>students=new inverseJoinColumns={@JoinColumn(name="studentid")}//對(duì)方類主鍵在中間表生成的對(duì)應(yīng)字段)<id<generator

<property" <key .Student"關(guān)系模型(Teache多對(duì)多Student)Set<Student>students=newHashSet<Student>()Set<Teacher>teachers=new Student一端的teachers只需要配XML配置方式:兩端配置一樣,注意表名和生成的中間表的字段屬性名要一Teacher<setname="students"<key<setname="teachers"<key關(guān)聯(lián)關(guān)系中的CRUD_Cascade_FetchrefreshA里面需要讀B MERGECascademergeoperation合并(merge=save+update)PERSISTCascadepersistoperationpersist()REFRESHCascaderefreshoperation刷新REMOVECascaderemoveoperation鐵律:雙向不要兩邊設(shè)置Eager(會(huì)有多余的査詢語(yǔ)句發(fā)出))另外:如果User類(即多的一方)中設(shè)置fetch=FetchType.LAZY則在調(diào)用多(即Group)的對(duì)象值的時(shí)候類似延遲加載即需要在commit();之前session還存在時(shí)調(diào)用如:);Update時(shí)@ManyToOne()中的cascade參數(shù)關(guān)Useruser=user改變?cè)赾ommit()想要Update方法usergroup表同時(shí)更User類Useruser=(User)session.get(User.class,1);注意:此處刪除的是多對(duì)一(即User對(duì)Group)中的“多”的一方(User類去掉@ManyToOne(cascade={CascadeType.All})注意:如果刪除的是多對(duì)一中的“一”的一方(Group類)時(shí),如果使用第3種方式(user屬性設(shè)Groupgroup=//循環(huán)將group中的set集合下的各個(gè)user對(duì)象設(shè)為//相當(dāng)于先將數(shù)據(jù)庫(kù)中user表中與group表關(guān)聯(lián)的字段(即groupid)設(shè)為 for(Useruser //再將group的set集合設(shè)為null,相當(dāng)于將group表中與user表關(guān)聯(lián)的字段(即userid)設(shè)為//此句的前提是user表中的關(guān)聯(lián)字段(groupid)已經(jīng)為null,如沒有則相當(dāng)于破壞了一對(duì)多關(guān)聯(lián),會(huì)報(bào) a)模hibernateannotationextension(Hibernate擴(kuò)展的annotation配置--較少用hibernatexml(Hibernate的xml配置方式--常用jpaxml(java提供的xml配置--較少用Jpa(不常用關(guān)系總集合(不太重要)繼承(不太重要 hibernate_1900_lnheritence_Map每個(gè)類分別一張表hibernate_2000_lnheritence_Maphibernate_2100_lnheritence_Mappublic SerializableTree(intid,Stringname,Treeparent,Listchildren)多 ist<Tree>children=newArrayList<Tree>();publicintreturn}publicTreegetParent(){return}可省略即為//若為L(zhǎng)AZY則查詢樹形時(shí)不會(huì)一次全部載入內(nèi)存(適用于較大的樹形),會(huì)每取一個(gè)葉子節(jié)點(diǎn)就fetch=FetchType.EAGER)publicList<Tree>{return}Hibernate查詢(QueryHQLvsNativeSQL>HQL.>EJBQL(JPQL1.0)>QBC(QueryByCriteria)>QBE(QueryBy總結(jié) 應(yīng)該和導(dǎo)航關(guān)系結(jié)合,共同為査詢提供服務(wù)性能優(yōu)連接池不關(guān)閉,或io后不關(guān)閉))(""http://@BatchSize解決N+1問

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論