![SSH框架項(xiàng)目教程課件第3章第五講_第1頁](http://file4.renrendoc.com/view10/M03/20/1A/wKhkGWWJZEuAUPNvAAFra-KPlaM612.jpg)
![SSH框架項(xiàng)目教程課件第3章第五講_第2頁](http://file4.renrendoc.com/view10/M03/20/1A/wKhkGWWJZEuAUPNvAAFra-KPlaM6122.jpg)
![SSH框架項(xiàng)目教程課件第3章第五講_第3頁](http://file4.renrendoc.com/view10/M03/20/1A/wKhkGWWJZEuAUPNvAAFra-KPlaM6123.jpg)
![SSH框架項(xiàng)目教程課件第3章第五講_第4頁](http://file4.renrendoc.com/view10/M03/20/1A/wKhkGWWJZEuAUPNvAAFra-KPlaM6124.jpg)
![SSH框架項(xiàng)目教程課件第3章第五講_第5頁](http://file4.renrendoc.com/view10/M03/20/1A/wKhkGWWJZEuAUPNvAAFra-KPlaM6125.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
重慶正大軟件學(xué)院軟件系《MVC框架程序設(shè)計(jì)》電子教案重慶正大軟件學(xué)院軟件系《MVC框架程序設(shè)計(jì)》課程組重慶正大軟件職業(yè)技術(shù)學(xué)院教案(項(xiàng)目類)授課對象系別軟件系本次課學(xué)時(shí)4學(xué)時(shí)年級班次大二章節(jié)題目第4章hibernate注解目的要求(含技能要求)理解注解的概念掌握在hibernate框架中使用注解方式配置實(shí)體與表的映射關(guān)系本節(jié)重點(diǎn)掌握在hibernate框架中使用注解方式配置實(shí)體與表的映射關(guān)系本節(jié)難點(diǎn)理解注解的概念教學(xué)方法項(xiàng)目教學(xué)法教學(xué)用具機(jī)房、屏幕廣播問題引入通過本章第一節(jié)用戶注冊數(shù)據(jù)入庫案例,從而引出本次課程。難點(diǎn)與重點(diǎn)講解方法引導(dǎo)、分析、講解、實(shí)作演示本次課小結(jié)課程小結(jié)教后禮記討論、思考題、作業(yè)(含實(shí)訓(xùn)作業(yè))完成本次課的課堂任務(wù)填寫實(shí)驗(yàn)報(bào)告任務(wù)介紹(5分鐘)改造本章第一節(jié)注冊信息入庫的任務(wù),使用hibernate框架注解方式取代對象與表的映射文件來實(shí)現(xiàn)注冊入庫,改造后執(zhí)行效果與改造前一樣。任務(wù)解析(50-60分鐘)加入hibernate框架注解相關(guān)jar包修改用戶實(shí)體類User,增加注解相關(guān)代碼。修改hibernate.cfg.xml配置文件。dao層:修改數(shù)據(jù)庫入庫處理類。調(diào)試運(yùn)行詳細(xì)步驟加入hibernate框架注解相關(guān)jar包在eclipse中打開第8章第一節(jié)完成的工程,加入注解相關(guān)jar包,具體jar包請參考本節(jié)任務(wù)解析部分【例子3.5-1c】的相關(guān)內(nèi)容,該jar包在同一個(gè)工程中只需加入一次。修改用戶實(shí)體類User,增加注解相關(guān)代碼,參考如下:@Entity@Table(name="user")publicclassUser{ @Id() @GeneratedValue(generator="userid") @GenericGenerator(name="userid",strategy="native") intid; @Column(name="name") Stringname; @Column(name="userName") StringuserName; @Column(name="password") Stringpassword; @Column(name="sex") Stringsex; @Column(name="province") Stringprovince; @Column(name="age") intage; @Column(name="birth") Datebirth; @Column(name="mobile") Stringmobile; @Column(name="hobbies") Stringhobbies; @Column(name="email") Stringemail; //以下省略每個(gè)成員變量的get/set方法}修改hibernate.cfg.xml配置文件。修改src目錄下的hibernate.cfg.xml,刪除或屏蔽下列代碼:<mappingresource="com/zdsoft/domain/User.hbm.xml"/>并在該位置添加代碼:<mappingclass="com.zdsoft.domain.User"/>dao層:修改數(shù)據(jù)庫入庫處理類。修改com.zdsoft.dao包下的數(shù)據(jù)處理類RegisterDao的構(gòu)造方法,save方法可完全重用,不作修改。構(gòu)造方法RegisterDao的關(guān)鍵代碼如下: publicRegisterDao(){ cfg=newAnnotationConfiguration();//注解方式創(chuàng)建 cfg.configure(); sessionFactory=cfg.buildSessionFactory(); }調(diào)試運(yùn)行發(fā)布工程,啟動(dòng)web服務(wù)器,運(yùn)行注冊頁面,按照本章第一節(jié)任務(wù)運(yùn)行,其結(jié)果一樣。根據(jù)任務(wù)提出問題(45-55分鐘)什么是注解?如何在hibernate框架中使用注解方式配置對象與表的關(guān)系映射?問題解析(45-55分鐘)關(guān)于注解注解(annotation)概念:是與一個(gè)程序中某個(gè)元素關(guān)聯(lián)信息或元數(shù)據(jù)的標(biāo)注。它不直接影響java程序的執(zhí)行,但是對例如編譯器警告或者像文檔生成器等輔助工具產(chǎn)生影響。注解在java1.5以上支持。我們可以這樣理解:注解是一個(gè)標(biāo)注;不直接影響java程序的執(zhí)行;注解的作用是為被注解的程序提供執(zhí)行所需的類似于工具、文檔或類庫,它反過來會影響程序的執(zhí)行。深入了解——注解與注釋的異同。相同點(diǎn):都是給程序進(jìn)行標(biāo)注,都不是必須的。不同點(diǎn):作用對象不同——注釋是給程序員看的,是把程序?qū)Τ绦騿T進(jìn)行解釋,注解是給編譯器看的,是把程序?qū)幾g器進(jìn)行解釋;程序運(yùn)行結(jié)果不同——注釋不影響程序的結(jié)果,注解不直接影響程序執(zhí)行,但為被注解的程序提供執(zhí)行所需的類似于工具、文檔或類庫,程序在運(yùn)行中有可能會用到注解所提供的“庫”,從而間接影響程序執(zhí)行結(jié)果。注解語法:@+注解類型名+(參數(shù)名=參數(shù)值,...)語法說明:注解是一種修飾符,能夠如其它修飾符(如public、static、final)一般使用。習(xí)慣用法是,注解用在其它的修飾符前面。注解由@開頭;注解類型是關(guān)鍵字,()里邊是多個(gè)成員-值列表組成的。這些參數(shù)的值必須是編譯時(shí)常量(即在運(yùn)行時(shí)不變)。如何獲得注解類型?這里可以通過三種方式獲得。方式1:使用內(nèi)建注解——Java5.0中經(jīng)常用到三個(gè)內(nèi)建注解:@Deprecated用于修飾已經(jīng)過時(shí)的方法;@Override用于修飾此方法覆蓋了父類的方法(而非重載);@SuppressWarnings用于通知java編譯器禁止特定的編譯警告?!纠?.5-1a】一個(gè)使用Java5.0內(nèi)建注解的類,該類演示了三個(gè)內(nèi)建注解的使用:publicclassUsingBuiltInAnnotation{//食物類classFood{}//干草類classHayextendsFood{}//動(dòng)物類classAnimal{FoodgetFood(){returnnull;}//使用Annotation聲明Deprecated方法@DeprecatedvoiddeprecatedMethod(){}}//馬類-繼承動(dòng)物類classHorseextendsAnimal{//使用Annotation聲明覆蓋方法@OverrideHaygetFood(){returnnewHay();}//使用Annotation聲明禁止警告@SuppressWarnings({"deprecation","unchecked"})voidcallDeprecatedMethod(ListhorseGroup){Animalan=newAnimal();an.deprecatedMethod();horseGroup.add(an);}}}參考資料:/docs/books/tutorial/java/javaOO/annotations.html/j2se/1.5.0/docs/guide/language/annotations.html/jgloss/annotations.html方式2:開發(fā)者自定義注解類型——類似于定義一個(gè)接口interface【例子3.5-1b】自定義一個(gè)注解類型@AnnotationDefineForTestFunction首先,定義注解類型@AnnotationDefineForTestFunction,代碼如下:importjava.lang.annotation.*;/***定義annotation*@authorcleverpig**///加載在VM中,在運(yùn)行時(shí)進(jìn)行映射@Retention(RetentionPolicy.RUNTIME)//限定此annotation只能標(biāo)示方法@Target(ElementType.METHOD)public@interfaceAnnotationDefineForTestFunction{}然后,使用該注解類型,參考代碼如下:/***一個(gè)實(shí)例程序應(yīng)用前面定義的Annotation:AnnotationDefineForTestFunction*/publicclassUsingAnnotation{@AnnotationDefineForTestFunctionpublicstaticvoidmethod01(){}@AnnotationDefineForTestFunctionpublicstaticvoidmethod02(){}@AnnotationDefineForTestFunctionpublicstaticvoidmethod03(){thrownewRuntimeException("method03");}publicstaticvoidmethod04(){thrownewRuntimeException("method04");}publicstaticvoidmain(String[]argv)throwsException{intpassed=0,failed=0;//被檢測的類名StringclassName="annotation.custom.UsingAnnotation";//逐個(gè)檢查此類的方法,當(dāng)其方法使用annotation聲明時(shí)用此方法for(Methodm:Class.forName(className).getMethods()){if(m.isAnnotationPresent(AnnotationDefineForTestFunction.class)){try{m.invoke(null);passed++;}catch(Throwableex){System.out.printf("測試%s失敗:%s%n",m,ex.getCause());failed++;}}}System.out.printf("測試結(jié)果:通過:%d,失敗:%d%n",passed,failed);}}代碼說明:上述類中main程序從className中取出類名,并且遍歷此類的所有方法,嘗試調(diào)用其中被自定義的注解類型AnnotationDefineForTestFunction標(biāo)注過的方法。在此過程中為了找出哪些方法被AnnotationDefineForTestFunction類型標(biāo)注過,需要使用反射的方式執(zhí)行此查詢。如果在調(diào)用方法時(shí)拋出異常,此方法被認(rèn)為已經(jīng)失敗,并打印一個(gè)失敗報(bào)告。最后,打印運(yùn)行通過/失敗的方法數(shù)量。方式3:使用第三方開發(fā)的注解類型:這是開發(fā)人員所常常用到的一種方式。比如我們使用JPA或者Hibernate框架中的注解類型,就以利用其中之一生成數(shù)據(jù)表映射配置文件,而不必使用xml文檔。關(guān)于JPA與hibernate框架:JPA(JavaPersistenceAPI,java持久化對象應(yīng)用編程接口)是Sun官方提出的Java持久化規(guī)范。它為Java開發(fā)人員提供了一種對象/關(guān)系映射工具來管理Java應(yīng)用中的關(guān)系數(shù)據(jù)。其目的主要是為了簡化現(xiàn)有的持久化開發(fā)工作和整合ORM技術(shù),結(jié)束現(xiàn)在Hibernate、TopLink等ORM框架各自為營的局面,制定一個(gè)可以由很多供應(yīng)商實(shí)現(xiàn)的API,并且開發(fā)人員可以編碼來實(shí)現(xiàn)該API,而不是使用私有供應(yīng)商特有的API。因此開發(fā)人員只需使用供應(yīng)商特有的API來獲得JPA規(guī)范沒有解決但應(yīng)用程序中需要的功能。盡可能地使用JPA的API,但是當(dāng)需要供應(yīng)商公開但是規(guī)范中沒有提供的功能時(shí),則使用供應(yīng)商特有的API。JPA是需要供應(yīng)商來實(shí)現(xiàn)其功能的,Hibernate就是JPA供應(yīng)商中很強(qiáng)的一個(gè),目前來說應(yīng)該無人能出其右。從功能上來說,JPA現(xiàn)在就是Hibernate功能的一個(gè)子集。Hibernate從3.2開始,就開始兼容JPA。Hibernate3.2獲得了SunTCK的JPA(JavaPersistenceAPI)兼容認(rèn)證。接下來,使用hibernate框架提供的注解類型,正是本節(jié)要重點(diǎn)介紹的內(nèi)容。關(guān)于hibernate框架注解官方文檔可參考/hibernate/annotations/3.4/reference/zh_cn/html_single/.如何在hibernate框架中使用注解方式配置對象與表的關(guān)系映射?如何使用注解:以學(xué)生信息管理系統(tǒng)新增學(xué)生信息入庫為例?!纠?.5-1c】學(xué)生信息管理系統(tǒng)中新生入學(xué)時(shí)需要錄入學(xué)生信息,學(xué)生信息包括學(xué)生姓名,性別,年齡,學(xué)號等。要求使用hibernate注解方式完成學(xué)生信息新增功能(不要求頁面,僅僅實(shí)現(xiàn)后臺入庫)。在數(shù)據(jù)庫中學(xué)生表結(jié)構(gòu)如表3.5-1a所示。表3.5-1a學(xué)生表student字段序號中文描述英文字段名字段類型備注流水號idintpk、notnull、自增學(xué)號studentNovarchar(50)notnull姓名studentNamevarchar(100)性別sexvarchar(2)年齡ageint步驟1:先在數(shù)據(jù)庫中創(chuàng)建如表3.5-1a所示的學(xué)生表,然后在eclipse或myeclipse中創(chuàng)建web工程studentInfoManage,并把hibernate及數(shù)據(jù)庫所需的jar文件拷貝到該工程WebContent/WEB-INF/lib目錄下。其中,hibernate注解安裝包(hibernate-annotations-3.4.0.GA.zip)需要解壓三個(gè)jar包:hibernate-annotations.jar、lib\ejb3-persistence.jar、hibernate-commons-annotations.jar,另外,要求JDK5.0以上(JDK1.5以上)。步驟2:在工程中創(chuàng)建com.zdsoft.domain包,在該包下新建學(xué)生實(shí)體類Student,關(guān)鍵代碼如下:@Entity@Table(name="student")publicclassStudent{@Id@GeneratedValue(generator="pkGenerator")@GenericGenerator(name="pkGenerator",strategy="native")privateintid;@ColumnprivateStringstudentName;@ColumnprivateStringstudentNo;@ColumnprivateStringsex;@Columnprivateintage; //以下省略get/set方法}.代碼說明:@Entity聲明一個(gè)實(shí)體類,必須配置項(xiàng),將一個(gè)類聲明為一個(gè)實(shí)體類(即一個(gè)持久化POJO類,該類是要和表進(jìn)行映射的)。聲明位置:聲明在實(shí)體類定義的前面,本例聲明了類Student是一個(gè)實(shí)體類。@Table(name="student")常見語法:@Table(name=“表名”);位置:聲明在類定義的前面;說明:聲明了該實(shí)體類映射關(guān)聯(lián)的表(table)。name屬性就是指定表名。若沒有使用該聲明,默認(rèn)映射與類名相同的表名。本例指定實(shí)體類Stuent映射的表是student。通常可以將@Entity與@Table兩種注解簡化配置為:@Entity(name=”student”)。@Id必須配置項(xiàng),用來聲明主鍵,常見語法:@Id();位置:聲明在某個(gè)類成員變量或該成員變量的get方法前;本例聲明了該實(shí)體類Student類的成員變量id為主鍵屬性(對應(yīng)表中的主鍵)。注意:若該注解沒有參數(shù),則類中成員變量名必須與表中的主鍵名一致。@GeneratedValue(generator="pkGenerator")@GenericGenerator(name="pkGenerator",strategy="native")組合配置項(xiàng),用來聲明主鍵值的生成方式,常見語法:@GeneratedValue(generator=“生成器名字")@GenericGenerator(name=“生成器名字”,strategy=“生成策略")聲明位置:聲明在@id后面,@GeneratedValue與@GenericGenerator配合使用;用來指定在增加記錄到表中時(shí),其主鍵值的賦值方式;生成器名字:程序員自定;生成策略:關(guān)鍵字,由hibernate框架提供了10多種生成策略,本例指定native就是將主鍵的生成工作交由數(shù)據(jù)庫完成,hibernate不管(很常用),其他生成策略參見表3.5-1b所示。表3.5-1bhibernate框架提供的生成策略序號生成策略使用說明native對于orcale采用Sequence方式,對于MySQL和SQLServer采用identity(處境主鍵生成機(jī)制),native就是將主鍵的生成工作將由數(shù)據(jù)庫完成,hibernate不管(很常用)
例:@GeneratedValue(generator="paymentableGenerator")
@GenericGenerator(name="paymentableGenerator",strategy="native")uuid采用128位的uuid算法生成主鍵,uuid被編碼為一個(gè)32位16進(jìn)制數(shù)字的字符串。占用空間大(字符串類型)。例:@GeneratedValue(generator="paymentableGenerator")
@GenericGenerator(name="paymentableGenerator",strategy="uuid")hilo要在數(shù)據(jù)庫中建立一張額外的表,默認(rèn)表名為hibernate_unque_key,默認(rèn)字段為integer類型,名稱是next_hi(比較少用)例:@GeneratedValue(generator="paymentableGenerator")
@GenericGenerator(name="paymentableGenerator",strategy="hilo")assigned在插入數(shù)據(jù)的時(shí)候主鍵由程序處理(很常用),這是<generator>元素沒有指定時(shí)的默認(rèn)生成策略。等同于JPA中的AUTO。例:
@GenericGenerator(name="",strategy="assigned")identity使用SQLServer和MySQL的自增字段,這個(gè)方法不能放到Oracle中,Oracle不支持自增字段,要設(shè)定sequence(MySQL和SQLServer中很常用)。等同于JPA中的IDENTITY,例:@GeneratedValue(generator="paymentableGenerator")
@GenericGenerator(name="paymentableGenerator",strategy="identity")select使用觸發(fā)器生成主鍵(主要用于早期的數(shù)據(jù)庫主鍵生成機(jī)制,少用)例:@GeneratedValue(generator="paymentableGenerator")
@GenericGenerator(name="paymentableGenerator",strategy="select")sequence調(diào)用謹(jǐn)慎數(shù)據(jù)庫的序列來生成主鍵,要設(shè)定序列名,不然hibernate無法找到。例:@GeneratedValue(generator="paymentableGenerator")
@GenericGenerator(name="paymentableGenerator",strategy="sequence",
parameters={@Parameter(name="sequence",value="seq_payablemoney")})seqhilo通過hilo算法實(shí)現(xiàn),但是主鍵歷史保存在Sequence中,適用于支持Sequence的數(shù)據(jù)庫,如Orcale(比較少用)例:@GeneratedValue(generator="paymentableGenerator")
@GenericGenerator(name="paymentableGenerator",strategy="seqhilo",
parameters={@Parameter(name="max_lo",value="5")})increnment插入數(shù)據(jù)的時(shí)候hibernate會給主鍵添加一個(gè)自增的主鍵,但是一個(gè)hibernate實(shí)例就維護(hù)一個(gè)計(jì)數(shù)器,所以在多個(gè)實(shí)例運(yùn)行的時(shí)候不能使用這個(gè)方法。例:@GeneratedValue(generator="paymentableGenerator")
@GenericGenerator(name="paymentableGenerator",strategy="increnment")foreign使用另一個(gè)相關(guān)的對象的主鍵。通常和<one-to-one>聯(lián)合起來使用。例:@Id
@GeneratedValue(generator="idGenerator")
@GenericGenerator(name="idGenerator",strategy="foreign",parameters={@Parameter(name="property",value="info")})
Integerid;
@OneToOne
EmployeeInfoinfo;guid采用數(shù)據(jù)庫底層的guid算法機(jī)制,對應(yīng)MySQL的uuid()函數(shù),SQLServer的newid()函數(shù),ORCALE的rawtohex(sys_guid())函數(shù)等。例:@GeneratedValue(generator="paymentableGenerator")
@GenericGenerator(name="paymentableGenerator",strategy="guid")uuid.hex類似uuid,建議用uuid替換,例:@GeneratedValue(generator="paymentableGenerator")
@GenericGenerator(name="paymentableGenerator",strategy="uuid.hex")sequence-identitysequence策略的擴(kuò)展,采用立即檢索策略來獲取sequence值,需要JDBC3.0和JDK4以上(含1.4)版本,例:@GeneratedValue(generator="paymentableGenerator")
@GenericGenerator(name="paymentableGenerator",strategy="sequence-identity",
parameters={@Parameter(name="sequence",value="seq_payablemoney")})@Column可選配置項(xiàng),聲明非主鍵字段,常見語法:@Column(name=“列名”);聲明位置:聲明在某個(gè)類成員變量或該成員變量的get方法前;聲明了該實(shí)體類的非主鍵屬性(對應(yīng)表中的某個(gè)非主鍵的字段)其中,name屬性指定表中的某個(gè)非主鍵列名,可選,默認(rèn)列名與實(shí)體類的成員變量名一樣。@Column注解的其他屬性說明:unique可選,是否唯一(默認(rèn)值false);nullable可選,是否為空(默認(rèn)值false)insertable可選,該列是否可以增加(默認(rèn)值true);updatable可選,該列是否可以更新(默認(rèn)值true);columnDefinition可選,為這個(gè)特定列覆蓋sql的ddl片段(這可能導(dǎo)致無法在不同數(shù)據(jù)庫間移植);table可選,定義對應(yīng)的表(默認(rèn)為主表);length可選,列長度(默認(rèn)值255);precision可選,列十進(jìn)制精度(decimalprecision)(默認(rèn)值0);scale可選,如果列十進(jìn)制數(shù)值范圍(decimalscale)可用,可以設(shè)置(默認(rèn)值0)。步驟3:編寫hibernate.cfg.xml文件,加入實(shí)體類映射配置,關(guān)鍵代碼如下:<mappingclass="com.zdsoft.domain.Student"/>代碼說明:此處修改改變了hibernate加載持久化對象的方式。在使用xml配置文件方式下使用的是Student.hbm.xml映射文件,在使用注解方式下直接配置Student類。注:目前版本的hibernate,兩種方式不能混用。步驟4:新建數(shù)據(jù)庫處理類StudentDao,其中創(chuàng)建sessionFactory的關(guān)鍵代碼(與使用配置文件進(jìn)行映射的不一樣),兩者不能混用:注解方式:newAnnotationConfiguration().configure().buildSessionFactory();配置文件方式:newConf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年聚酯成型網(wǎng)項(xiàng)目可行性研究報(bào)告
- 成都四川成都簡陽市三星鎮(zhèn)便民服務(wù)和智慧蓉城運(yùn)行中心招聘綜治巡防隊(duì)員筆試歷年參考題庫附帶答案詳解
- 2025年牛仔布駁掌手套項(xiàng)目可行性研究報(bào)告
- 2025年民用灶項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國心可舒中藥行業(yè)投資前景及策略咨詢研究報(bào)告
- 恩施2025年湖北恩施州巴東縣教育局所屬事業(yè)單位選調(diào)6人筆試歷年參考題庫附帶答案詳解
- 2025至2031年中國壓電式渦街流量計(jì)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年醫(yī)用消毒液項(xiàng)目可行性研究報(bào)告
- 2025至2030年中國黑棕2色系圍巾坐猴數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國高發(fā)撥叉數(shù)據(jù)監(jiān)測研究報(bào)告
- 化工過程安全管理導(dǎo)則安全儀表管理課件
- 企業(yè)對外溝通與形象塑造制度
- 中國高血壓防治指南-解讀全篇
- 2024年監(jiān)控安裝合同范文6篇
- 2024年山東省高考政治試卷真題(含答案逐題解析)
- 煙葉復(fù)烤能源管理
- 應(yīng)收賬款管理
- 食品安全管理員考試題庫298題(含標(biāo)準(zhǔn)答案)
- 非ST段抬高型急性冠脈綜合征診斷和治療指南(2024)解讀
- 2024年山東濟(jì)寧初中學(xué)業(yè)水平考試地理試卷真題(含答案詳解)
- 撫恤金喪葬費(fèi)協(xié)議書模板
評論
0/150
提交評論