




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Struts2+Spring+MyBatisStruts2+Spring+MyBatis徐李春 2015-06-16Contents目目錄錄 1Part框架的介紹Introduction to the framework 1.1 1.1 認(rèn)識(shí)框架1.2 1.2 框架的背景Struts2以WebWork優(yōu)秀的設(shè)計(jì)思想為核心,吸收了Struts1的部分優(yōu)點(diǎn),建立了一個(gè)兼容Struts1和WebWork的優(yōu)秀MVC框架。Struts2 的目標(biāo)是希望可以讓原來(lái)使用Struts1和WebWork的開(kāi)發(fā)人員,都可以平穩(wěn)過(guò)度的使用Struts2的框架。2015年12月,WebWork和Struts Ti宣布
2、合并,與此同時(shí),Struts Ti改為Struts Action Framework2.0,成為Struts真正的繼承者。Spring是一個(gè)開(kāi)源的框架,由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。傳統(tǒng)J2EE應(yīng)用的開(kāi)發(fā)效率低,應(yīng)用服務(wù)器廠商對(duì)各種技術(shù)的支持并沒(méi)有真正統(tǒng)一,導(dǎo)致J2EE的應(yīng)用沒(méi)有真正實(shí)現(xiàn)Write Once及Run Anywhere的承諾。Spring作為開(kāi)源的中間件,獨(dú)立于各種應(yīng)用服務(wù)器,甚至無(wú)須應(yīng)用服務(wù)器的支持,也能提供應(yīng)用服務(wù)器的功能,如聲明式事務(wù)等。 Spring產(chǎn)生的背景MyBatis產(chǎn)生的背景Mybatis background1、傳統(tǒng)的j
3、dbc,有許多操作是與業(yè)務(wù)和數(shù)據(jù)無(wú)關(guān)的,真正需要的是,一個(gè)運(yùn)行sql語(yǔ)句的功能,還有取回結(jié)果的功能,但是jdbc要求你處理連接,會(huì)話、statement,尤其是還要你注意關(guān)閉資源,還要寫try catch處理異常 。2、iBatis 解決了jdbc的問(wèn)題,不僅如此,還要求你把sql語(yǔ)句寫到xml里,這樣不會(huì)把sql編譯到程序中,以增強(qiáng)程序的可移植性,在不重新編譯的情況下,可以更換數(shù)據(jù)庫(kù)。3、MyBatis 本是apache的一個(gè)開(kāi)源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis。 1.3 1
4、.3 框架的優(yōu)缺點(diǎn) 全局結(jié)果與聲明式異常處理。Struts2缺點(diǎn)如果項(xiàng)目功能模塊比較多,需要編寫大量的配置文件。由于使用了ognl和值棧,所以并發(fā)量高時(shí),Struts2的性能比較低。若一個(gè)請(qǐng)求傳遞的參數(shù)比較多,Action就需要為每一個(gè)參數(shù)寫setter和getter方法,此時(shí)容易導(dǎo)致Action臃腫。Spring優(yōu)點(diǎn)Spring支持JDBC和O/R Mapping產(chǎn)品。Spring能使用AOP提供聲明性事務(wù)管理。 降低了組件之間的耦合性。 面向切面編程。開(kāi)源免費(fèi)。能有效組織中間層對(duì)象 。能消除在許多工程中常見(jiàn)的對(duì)Singleton的過(guò)多使用 。能過(guò)幫助我們實(shí)現(xiàn)真正意義上的接口編程。應(yīng)用中的大
5、多數(shù)業(yè)務(wù)對(duì)象沒(méi)有依賴于Spring。使用Spring構(gòu)建的應(yīng)用程序易于單元測(cè)試。 將原本應(yīng)該代碼化的邏輯配置化,增加了出錯(cuò)的機(jī)會(huì)以及額外的負(fù)擔(dān) 。控制器過(guò)于靈活,缺少一個(gè)公用控制器。 缺點(diǎn)MyBatis缺點(diǎn)MyBatis優(yōu)點(diǎn)提供對(duì)象關(guān)系映射標(biāo)簽,支持對(duì)象關(guān)系組建維護(hù) 。提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的orm字段關(guān)系映射 。提供xml標(biāo)簽,支持編寫動(dòng)態(tài)sql。 解除sql與程序代碼的耦合。sql寫在xml里,便于 統(tǒng) 一 管 理和優(yōu)化。易于上手和掌握 。DAO層過(guò)于簡(jiǎn)單,對(duì)象組裝的工作量較大。編寫動(dòng)態(tài)sql時(shí),不方便調(diào)試,尤其邏輯復(fù)雜時(shí)。 緩存使用不當(dāng),容易產(chǎn)臟數(shù)據(jù)。sql依賴于數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)
6、庫(kù)移植性差。 2Part框架的原理Principle of frame 2.1 Struts22.1 Struts2的原理2.2 Struts22.2 Struts2整體結(jié)構(gòu)圖2.3 Spring2.3 Spring原理控制反轉(zhuǎn)/依賴注入。簡(jiǎn)單描述:對(duì)象不需要去new,交給容器自動(dòng)創(chuàng)建。面線切面編程。實(shí)現(xiàn)聲明式的異常管理以及統(tǒng)一的日志管理等。主要運(yùn)用了jdk動(dòng)態(tài)代理中的Proxy類和InvicationHandler接口 實(shí) 現(xiàn) , 創(chuàng) 建 代 理 類 , 調(diào) 用invoke方法。AOPBIOCA通過(guò)配置文件或者注解的方式,告訴Spring容器需要實(shí)例化哪些對(duì)象,然后Spring的bean工廠
7、通過(guò)反射在容器啟動(dòng)時(shí)實(shí)例化對(duì)象。2.4 Spring2.4 Spring功能架構(gòu)圖030201042.5 MyBatis2.5 MyBatis原理ORM框架思想2.5 MyBatis2.5 MyBatis原理032.6 MyBatis2.6 MyBatis功能架構(gòu)圖3Part框架的使用The use of the framework 3.1 Struts23.1 Struts2的使用Jar包的導(dǎo)入(Struts2.3) commons-fileupload-1.3.jar commons-io-2.2.jar commons-lang3-3.1.jar commons-logging-1.1.
8、3.jar freemarker-2.3.19.jar javassist-3.11.0.GA.jar ognl-3.0.6.jar struts2-core-2.3.16.jar xwork-core-2.3.16.jar3.1 Struts23.1 Struts2的使用1.Strust2核心攔截器配置在web.xml加入以下配置 struts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2/* 3.1 Struts23.1 Struts2的使用Struts2配置文件(struts.x
9、ml)Struts2的配置文件默認(rèn)名稱為struts.xml,且該文件放在src根目錄下 若要修改配置文件名或路徑等信息,可以在Struts2的核心攔截器的加入以下參數(shù)(紅色字體) struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter filterConfig classpath:struts2/*.xml 3.1 Struts23.1 Struts2的使用響應(yīng)普通的請(qǐng)求/index.jsp/login.jsp請(qǐng)求路徑:Priv/ UserAction響應(yīng)ajax請(qǐng)求(兩種方式,推薦這種)3.
10、1 Struts23.1 Struts2的使用 Action里的方法 Public String queryData() /查數(shù)據(jù),并封裝成Json數(shù)據(jù)格式/向前臺(tái)寫數(shù)據(jù)public static void outPutJson(String json)try HttpServletResponse response = ServletActionContext.getResponse();response.setCharacterEncoding(utf-8);response.setContentType(text/json;charset=utf-8);response.setHeade
11、r(cache-control, no-cache);response.setHeader(pragma, no-cache);response.setDateHeader(expires, 0L);response.getWriter().write(json);response.getWriter().flush();response.getWriter().close(); catch (IOException e) e.printStackTrace();3.1 Struts23.1 Struts2的使用通配符的使用 使用通配符,將action配置降到最低(一定要遵守“約定優(yōu)于配置”的
12、原則) /1_2_success.jsp響應(yīng)所有*_*匹配的請(qǐng)求,如請(qǐng)求url為:index/Student_add, 1表示請(qǐng)求地址的第一個(gè)*號(hào)如Student,2表示第二個(gè)如add注意:1)一定要按照約定寫才可以用通配符 2)如果同時(shí)匹配好幾個(gè)action,則匹配最詳細(xì)的一個(gè),如:和則匹配優(yōu)先第一個(gè) 3)如果都有*號(hào)如:和則按照順序來(lái)匹配3.1 Struts23.1 Struts2的使用Action寫法(默認(rèn)調(diào)用execute()方法)1)自己寫一個(gè)Action,如public class IndexAction public String execute() return success
13、;2)實(shí)現(xiàn)Action接口public class IndexAction implements Actionpublic String execute() return success;2)繼承ActionSupport類(企業(yè)中只用這種)public class IndexAction extends ActionSupportpublic String execute() return success;*注意:方法名隨便定義,只需返回String類型即可 Struts2前后參數(shù)傳遞3.1 Struts23.1 Struts2的使用3.1 Struts23.1 Struts2的使用跳轉(zhuǎn)(r
14、esult配置) 常用跳轉(zhuǎn)到j(luò)sp頁(yè)面a)dispatcher 服務(wù)器的跳轉(zhuǎn),相當(dāng)于forward, 默認(rèn)b)redirect 相當(dāng)于重定向跳轉(zhuǎn)到actionc)chain forward到action,凡是forward共享一個(gè)值棧d)redirectAction 重定向到actionSession,Rquest,ApplicationContext對(duì)象獲取 資源注射(IOC-控制反轉(zhuǎn))(最常用) 實(shí)現(xiàn)RequestAware, SessionAware, ApplicationAware接口攔截器配置(用戶登錄、權(quán)限驗(yàn)證等)統(tǒng)一異常管理OGNL表達(dá)式值棧的使用3.2 MyBatis3.2
15、MyBatis的使用(mybatis-3.2.0.jarmybatis-3.2.0.jar)MyBatis核心配置文件(myBatis.xml) 3.2 MyBatis3.2 MyBatis的使用映射文件配置 select * from user where id = #id 測(cè)試 獲取SessionFactory Reader reader = Resources.getResourceAsReader(“myBatis.xml); SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(reader); 獲取Session S
16、qlSession session = sqlSessionFactory.openSession(); 方法調(diào)用User user = (User) session.selectOne(“com.lcxu.mybatis.models.UserMapper.selectUserById”); 3.2 MyBatis3.2 MyBatis的使用面向接口編程(MyBatis推薦) 映射文件(UserMapper.xml) Mapper層(dao層)Public interface UserMapper() User selectUserById(int id); Service層UserMapp
17、er對(duì)象調(diào)用selectUserById(int id)方法。*注意: *Mapper接口的方法名必須與UserMapper配置文件id一致,也就是說(shuō)接口中定義了selectUserById方法,mapper配置文件中必須有一個(gè)id為selectUserById的查詢,并且配置文件的命名空間名稱與接口包名一致(未測(cè)試),返回結(jié)果與傳參類型都要一致。增刪改查操作都一樣。*mapper配置文件中有對(duì)應(yīng)的;3.2 MyBatis3.2 MyBatis的使用MyBatis映射關(guān)系配置 數(shù)據(jù)庫(kù)表與實(shí)體的映射(若庫(kù)表列名與實(shí)體名一模一樣,則可以省去,若返回集合,則必須配置)此時(shí)select語(yǔ)句select
18、 USER_ID, USERNAME from user*注意 column不為數(shù)據(jù)庫(kù)列名,而是別名3.2 MyBatis3.2 MyBatis的使用對(duì)象關(guān)聯(lián)關(guān)系(一對(duì)一,一對(duì)多等) association標(biāo)簽 舉例:用戶和電廠的關(guān)系,用戶實(shí)體有id和name屬性,電廠有id和name屬性以及User user對(duì)象,電廠表有聯(lián)系人(用戶)的id,要求,查詢電廠名稱和用戶名稱(根據(jù)聯(lián)系人id一一對(duì)應(yīng))。select F.name FNAME, U.name UNAME from factory F, user U where F.user_id = U.id 返回結(jié)果:List,List有N個(gè)F
19、actory對(duì)象,F(xiàn)actory對(duì)象name賦值,F(xiàn)actory里的User user對(duì)象被賦值。3.2 MyBatis3.2 MyBatis的使用 collection標(biāo)簽 舉例:操作菜單的獲取Menu實(shí)體 Public class Menu private String id;private String text;private Menu menu;private List children;*getter & setter 映射文件配置:3.2 MyBatis3.2 MyBatis的使用 Sql語(yǔ)句使用(SQL未寫出,執(zhí)行出以下結(jié)果就ok)此時(shí),MyBatis會(huì)根據(jù)配置的關(guān)系映射,自動(dòng)
20、封裝對(duì)象,如上圖,有4個(gè)Parent,10個(gè)children,MyBatis會(huì)封裝成4個(gè)Menu對(duì)象,每個(gè)Menu對(duì)象里有一個(gè)children集合,此時(shí)只需要轉(zhuǎn)換成json,前臺(tái)的LigerUI就能展示成樹(shù)形菜單。3.2 MyBatis3.2 MyBatis的使用MyBatis的參數(shù)傳遞 Java基本類型參數(shù)傳遞,以int為例 Dao層,Public Interface UserMapperUser selectUserById(int id) UserMapper.xmlselect * from user where id = #id 引用類型參數(shù)的傳遞 普通對(duì)象參數(shù)的傳遞 假設(shè)User對(duì)
21、象有id和userName屬性select * from user where id = #id and name = #userName/select3.2 MyBatis3.2 MyBatis的使用 Map類型參數(shù)傳遞 若傳遞的參數(shù)比較多,且各參數(shù)不能封裝一起,則可以考慮傳遞一個(gè)Map類型參數(shù) CemsDataMapper接口 List queryRealTimeCemsData(Map map);Map實(shí)參有 map.put(“so2”, “1”); map.put(“nox”, 2);select * sum(casewhen signalId=#so2 ), sum(casewhen
22、 signalId=#nox )*注意:map的M小寫,若傳入的參數(shù)為String類型,S小寫,傳入的參數(shù)要有setter和getter方法,否則報(bào)錯(cuò)3.2 MyBatis3.2 MyBatis的使用返回值 若返回值為單一對(duì)象,或者java基本類型,則寫法為resultTypeselect * from user where id = #id 若返回多個(gè)對(duì)象,則返回resultMapselect * sum(casewhen signalId=#so2 ), sum(casewhen signalId=#nox )3.2 MyBatis3.2 MyBatis的使用MyBatis的動(dòng)態(tài)SQL語(yǔ)句
23、 if語(yǔ)句select * from user where id 1=1and user_id = #id choose (when,otherwize) ,相當(dāng)于java 語(yǔ)言中的 switch ,滿足第一個(gè)when,則執(zhí)行第一個(gè)條件后就跳出choose,都不滿足,則執(zhí)行otherwise select * from user where 1 = 1 and username = #name and user_id = #id and admin_flag = #adminFlag 其他3.3 Spring3.3 Spring的使用(整合MyBatisMyBatis)Spring需要的jar
24、包 aopalliance-1.0.jar aspectj-1.6.12.jar aspectjweaver-1.6.2.jar cglib-nodep-2.1_3.jar commons-dbcp.jar commons-logging-1.0.4.jar commons-pool.jar org.springframework.aop-3.0.0.RELEASE.jar org.springframework.asm-3.0.0.RELEASE.jar org.springframework.beans-3.0.0.RELEASE.jar org.springframework.conte
25、xt.support-3.0.0.RELEASE.jar org.springframework.context-3.0.0.RELEASE.jar org.springframework.core-3.0.0.RELEASE.jar org.springframework.expression-3.0.0.RELEASE.jar org.springframework.jdbc-3.0.0.RELEASE.jar org.springframework.orm-3.0.0.RELEASE.jar org.springframework.transaction-3.0.0.RELEASE.ja
26、r3.3 Spring3.3 Spring的使用(整合MyBatisMyBatis)Spring核心配置文件(beans.xml(名稱隨便取)) 3.3 Spring3.3 Spring的使用(整合MyBatisMyBatis) !- -3.3 Spring3.3 Spring的使用(整合MyBatisMyBatis)上述文件配置好后,myBatis與Spring整合完成3.3 Spring3.3 Spring的使用(整合MyBatisMyBatis)IOC Xml 假設(shè)將UserService對(duì)象交給Spring管理,且UserService類里有add()方法,在Spring配置文件中加入
27、以下配置 JunitTestpublic void addTest() ApplicationContext acx = new ClassPathXmlApplicationContext(beans.xml);UserService service = (UserService)acx.getBean(userService);User user = new User();service.add(user);3.3 Spring3.3 Spring的使用(整合MyBatisMyBatis)注解(推薦)UserMapper類Repository (value=userMapper)publi
28、c class UserMapper private UserMapper userMapper;Resourcepublic void setUserMapper(UserMapper userMapper) this.userMapper= userMapper;Spring容器會(huì)掃描包,找出相應(yīng)的注解,實(shí)例化對(duì)象。 Resource與Autowired區(qū)別Resource默認(rèn)根據(jù)名稱匹配,名稱未匹配上,則按類型匹配。AutoWired默認(rèn)按類型匹配Component Service Controller Repository區(qū)別都是用來(lái)注解類的,表明這個(gè)類的對(duì)象交個(gè)Spring管理,作用
29、一樣,基本沒(méi)區(qū)別(高版本未研究)一般用法 ,見(jiàn)名知意,Controller 注解Action層, Service注解Service層, Repository注解持久層(dao層), Component 注解一般的組件。3.3 Spring3.3 Spring的使用(整合MyBatisMyBatis)AOP(主要用來(lái)聲明式的異常管理或統(tǒng)一日志日常等管理,推薦xml)以事務(wù)管理為例3.4 Spring3.4 Spring的使用(整合Struts2Struts2)Spring監(jiān)聽(tīng)器配置 在web.xml里配置Spring監(jiān)聽(tīng)器,web啟動(dòng)就加載Spring配置,以及指定context參數(shù)-beans
30、.xml的位置()org.springframework.web.context.ContextLoaderListenercontextConfigLocation!- /WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml -classpath:beans.xml導(dǎo)入包:struts2-spring-plugin.jar若出現(xiàn)相同的包,則去掉低版本的包3.4 Spring3.4 Spring的使用(整合Struts2Struts2)Struts2的Spring注解設(shè)置 Controller注解Action的
31、類 Resource注解交給容器的對(duì)象 如: Service類Service(“userService”)public class UserService Action類ControllerPublic class UserAction() private UserServicee userService; Resourcepublic void setUserService();/getter方法;4Part技術(shù)小結(jié)Technical summary 4.1 Spring4.1 Spring統(tǒng)一日志及異常管理統(tǒng)一日志管理Component(logLnterceptor)public clas
32、s LogInterceptor implements MethodInterceptor Overridepublic Object invoke(MethodInvocation invocation) throws Throwable long procTime = System.currentTimeMillis();Logger loger = Logger.getLogger(invocation.getClass();(#);(invocation.getMethod() + :開(kāi)始執(zhí)行!);/ 方法前的操作Object args = in
33、vocation.getArguments();for(Object obj: args) (方法參數(shù):+obj);Object obj = ceed();/ 執(zhí)行需要Log的方法procTime = System.currentTimeMillis() - procTime;(invocation.getMethod() + :正常執(zhí)行結(jié)束!);/ 方法后的操作(invocation.getMethod() + 方法共用了 + procTime+ 毫秒);(#);return obj;
34、4.1 Spring4.1 Spring統(tǒng)一日志及異常管理統(tǒng)一異常管理 Component(exceptionHandler) public class ExceptionAdvisor implements ThrowsAdvice public void afterThrowing(Method method, Object args, Object target,Exception ex) throws Throwable / 在后臺(tái)中輸出錯(cuò)誤異常異常信息,通過(guò)log4j輸出。Logger log = Logger.getLogger(target.getClass();
35、(*);(代理對(duì)象: + target.getClass().getName();(拋出異常方法名稱: + method.getName();for (int i = 0; i args.length; i+) (方法參數(shù): + argsi);log.warn(拋出的異常: + ex.getClass().getName();log.warn(異常詳細(xì)信息: + ex.getMessage();log.warn(詳細(xì)的錯(cuò)誤信息: + ex);(*);/ 在這里判斷異常,根據(jù)不同的異常返回錯(cuò)誤。if (ex.getClass().e
36、quals(DataAccessException.class) throw new BusinessException(數(shù)據(jù)庫(kù)操作失?。?;4.1 Spring4.1 Spring統(tǒng)一日志及異常管理Spring核心配置 !-*Mapper -*Service exceptionHandlerlogLnterceptor 4.2 Struts24.2 Struts2用戶登錄攔截LoginInteceptor public class LoginInterceptor extends AbstractInterceptor private static final long serialVersi
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 健康衛(wèi)生知識(shí)培訓(xùn)課件
- 山東省臨沂市費(fèi)縣2024-2025學(xué)年七年級(jí)上學(xué)期期末生物學(xué)試題(含答案)
- 箱包來(lái)料加工購(gòu)銷合同
- 個(gè)人技術(shù)培訓(xùn)協(xié)議簽訂指南
- 美發(fā)美甲服務(wù)合同
- 無(wú)抵押個(gè)人借款合同
- 2024-2025學(xué)年高二化學(xué)人教版選擇性必修3教學(xué)課件 第三章 第四節(jié) 第2課時(shí) 羧酸衍生物
- 電子數(shù)據(jù)安全保護(hù)合作協(xié)議
- 某幼兒園保潔人員聘用合同
- 航空航天材料科學(xué)知識(shí)點(diǎn)解析與試題集
- 中學(xué)家長(zhǎng)學(xué)校工作方案(10篇)
- 高考地理二輪復(fù)習(xí)【知識(shí)精研】大氣運(yùn)動(dòng)規(guī)律-大氣受熱過(guò)程與氣溫
- 日內(nèi)交易策略(TBQ版)
- 2025年新執(zhí)業(yè)醫(yī)師定期考核真題庫(kù)附參考答案
- 部編版九年級(jí)道德與法治上冊(cè)《第二課創(chuàng)新驅(qū)動(dòng)發(fā)展》同步測(cè)試題(附答案)
- 充電樁投放合同范本
- 天津2025年天津市天賓服務(wù)中心招聘13人筆試歷年參考題庫(kù)附帶答案詳解
- 2025-2030年地質(zhì)數(shù)據(jù)定制化服務(wù)行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 鐵路信號(hào)基礎(chǔ)(第四版) 課件 第一章 信號(hào)繼電器
- 氯化車間安全操作規(guī)程(2篇)
- 2024年電力交易員(高級(jí)工)職業(yè)鑒定理論考試題庫(kù)(單選題、多選題、判斷題)
評(píng)論
0/150
提交評(píng)論