版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第12章MyBatis-Plus快速入門《JavaEE企業(yè)級應用開發(fā)教程(Spring+SpringMVC+MyBatis)》學習目標/Target掌握MyBatis-Plus的通用接口,能夠簡述MyBatis-Plus的通用接口提供的常用方法熟悉MyBatis-Plus的代碼生成器,能夠參照MyBatis-Plus官網的示例使用MyBatis-Plus的代碼生成器生成代碼了解MyBatis-Plus是什么,能夠簡述MyBatis-Plus的特性掌握MyBatis-Plus的條件構造器,能夠簡述MyBatis-Plus條件構造器的作用、常見的條件構造器、條件構造器常用的方法掌握MyBatis-Plus基本使用,能夠在程序中使用MyBatis-Plus通用接口的方法和條件構造器實現(xiàn)增刪改查操作章節(jié)概述/SummaryMyBatis是一款備受Java開發(fā)者青睞的持久層框架,然而,隨著項目規(guī)模和復雜度的增長,開發(fā)者在應用MyBatis時可能面臨諸多問題,如大量重復的增刪改查操作編寫、復雜查詢條件構造的難度大等問題。這些問題往往會降低開發(fā)效率,增加代碼冗余。為了進一步提升MyBatis的易用性,減少樣板代碼,一個強大的MyBatis增強工具—MyBatis-Plus應運而生。本章將對MyBatis-Plus的入門知識進行講解。目錄/Contents12.112.2MyBatis-Plus概述MyBatis-Plus核心功能12.3MyBatis-Plus基本使用MyBatis-Plus概述12.112.1
MyBatis-Plus概述先定一個小目標!
先定一個小目標!了解MyBatis-Plus是什么,能夠簡述MyBatis-Plus的特性12.1
MyBatis-Plus概述盡管MyBatis具有諸多優(yōu)點,但也存在一些不足之處,例如MyBatis配置文件相對煩瑣、在編寫業(yè)務邏輯時需要手動創(chuàng)建對應的Mapper的方法,以及對應的映射文件或SQL語句。針對MyBatis的這些不足,MyBatis-Plus應運而生。MyBatis-Plus在MyBatis的基礎上進行增強,旨在簡化開發(fā)、提高效率而不改變MyBatis原生特性,它支持MyBatis的所有原生特性,同時提供了諸如簡化增刪改查操作、強大的查詢構造器、自動填充功能以及便捷的分頁查詢等功能,極大地提升了開發(fā)效率和代碼質量。因此,MyBatis-Plus逐漸成為Java開發(fā)人員項目開發(fā)備受推崇的框架,幫助開發(fā)者更輕松地應對復雜的數據訪問需求。12.1
MyBatis-Plus概述MyBatis-Plus除了解決了MyBatis的些許不足外,還具有如下特性。①無侵入②損耗?、蹚姶蟮脑鰟h改查操作④支持Lambda形式調用⑤支持主鍵自動生成⑥支持ActiveRecord模式⑦支持自定義全局通用操作⑧內置代碼生成器⑨內置分頁插件⑩分頁插件支持多種數據庫?內置性能分析插件?內置全局攔截插件12.1
MyBatis-Plus概述MyBatis-Plus的框架結構MyBatis-Plus核心功能12.212.2
MyBatis-Plus核心功能MyBatis-Plus作為MyBatis框架的優(yōu)秀增強工具應運而生,以其一系字段精心設計的核心功能,極大地簡化了Java應用程序與數據庫的交互過程,提升了開發(fā)團隊的生產力。下面分別對其常見的核心功能進行講解。12.2.1
代碼生成器先定一個小目標!
先定一個小目標!熟悉MyBatis-Plus的代碼生成器,能夠參照MyBatis-Plus官網的示例使用MyBatis-Plus的代碼生成器生成代碼12.2.1
代碼生成器MyBatis-Plus的代碼生成器堪稱提升開發(fā)效率的利器。只需簡單配置,即可基于數據表一鍵生成對應的全套基礎代碼,包括實體類、Mapper接口、Mapper的映射文件、Service接口和對應實現(xiàn)類、Controller類,完美契合常見的分層架構設計。與MyBatisGenerator相比,MyBatis-Plus的代碼生成器除了具備MyBatisGenerator的基本功能外,還針對MyBatis-Plus的特性進行了專門優(yōu)化和擴展,如:集成了MyBatis-Plus的實體映射注解,自動為生成的實體類添加這些注解,實現(xiàn)元數據驅動;支持MyBatis-Plus的特殊字段處理,如邏輯刪除字段、版本控制字段等,確保生成的實體類與MyBatis-Plus的內置功能無縫對接。這不僅極大地減少了重復勞動,確保代碼規(guī)范統(tǒng)一,更能讓開發(fā)者迅速專注于業(yè)務邏輯的實現(xiàn),而非底層基礎設施的搭建。12.2.1
代碼生成器MyBatis-Plus的官方文檔和社區(qū)中提供了大量的示例和教程,幫助開發(fā)者理解和使用代碼生成器,并提供了各種配置選項的說明。開發(fā)者只需在項目中參照對應的示例編寫代碼運行即可,同時通過調整配置參數和修改模板,開發(fā)者可以實現(xiàn)對代碼生成細節(jié)的自定義,以滿足項目的特定需求。MyBatis-Plus提供了新舊兩套代碼生成器,分別適用于MyBatis-Plus3.5.1及以上版本和MyBatis-Plus3.5.1以下的版本,其中新版本的代碼生成器對歷史版本不兼容。下面基于新版本的代碼生成器演示使用代碼生成器生成圖書表對應的基礎代碼12.2.1
代碼生成器1.創(chuàng)建項目和引入依賴創(chuàng)建一個名稱為chapter12的Maven項目,在項目的pom.xml文件中引入MyBatis-Plus自動生成代碼所需的相關依賴,具體如文件12-1所示。文件12-1pom.xml源代碼12.2.1
代碼生成器2.設置代碼生成器的配置在項目的src/test/java目錄下創(chuàng)建自動生成代碼的類,在該類中創(chuàng)建代碼生成器對,并指定其生成代碼時的配置,具體如文件12-2所示。文件12-2MyBatisPlusGenerator.java源代碼12.2.1
代碼生成器3.測試代碼生成效果運行文件12-2中的main()方法,創(chuàng)建代碼生成器,并根據設置的配置生成代碼,運行后項目的目錄結構如圖12-2所示。12.2.1
代碼生成器(1)實體類本次生成實體類時指定啟用Lombok和MyBatis-Plus的表字段注解,生成的實體類Book的代碼如文件12-3所示。文件12-3Book.java源代碼下面依次對MyBatis-Plus代碼生成器·基礎代碼進行簡單說明。12.2.1
代碼生成器(2)Mapper接口生成操作Book的Mapper接口BookMapper的代碼如文件12-4所示。文件12-4BookMapper.java源代碼12.2.1
代碼生成器(3)Service接口和對應實現(xiàn)類生成操作Book的Service接口BookService和對應實現(xiàn)類BookServiceImpl的代碼如文件12-5和文件12-6所示。文件12-5
BookService.java文件12-6
BookServiceImpl.java源代碼12.2.1
代碼生成器(4)Controller類生成的操作Book的Controller類BookController的代碼如文件12-7所示。文件12-7
BookController.java源代碼12.2.2
通用接口先定一個小目標!
先定一個小目標!掌握MyBatis-Plus的通用接口,能夠簡述MyBatis-Plus的通用接口提供的常用方法12.2.2
通用接口MyBatis-Plus為了減少重復性的代碼編寫,提高開發(fā)效率,提供了更為便捷的通用接口BaseMapper和IService,這兩個接口提供了一套統(tǒng)一的、通用的數據庫操作方法,適用于各種實體類的操作,基于這兩個接口可以簡化Mapper和Service的開發(fā)。下面分別對這兩個通用接口的基本功能進行講解。12.2.2
通用接口1.BaseMapper接口BaseMapper接口是MyBatis-Plus中定義的一個基礎映射器接口,它提供了與數據表進行交互的基本方法,例如插入、刪除、更新、查詢等常用的數據庫操作方法,并提供了對實體類與數據表之間的映射關系的支持。通過繼承BaseMapper接口,開發(fā)者可以輕松地實現(xiàn)與數據表的交互,無需手動編寫SQL語句或進行繁瑣的映射配置。下面對BaseMapper接口中封裝的基本增刪改查方法進行說明。(1)插入方法intinsert(Tentity);12.2.2
通用接口(2)刪除方法方法說明intdeleteById(Serializableid)用于根據參數id刪除數據庫中對應主鍵的記錄intdeleteById(Tentity)用于根據entity實體對象的主鍵Id刪除數據庫中的記錄intdelete(@Param(
Constants.WRAPPER)
Wrapper<T>wrapper)用于根據wrapper條件構造器中的條件刪除數據庫中的記錄。條件構造器允許開發(fā)者以鏈式調用的方式構建復雜的SQL條件。傳入這個構造器后,MyBatis-Plus會根據構造器中的條件生成相應的DELETE語句并執(zhí)行12.2.2
通用接口(2)刪除方法方法說明intdeleteBatchIds(@Param(
Constants.COLLECTION)Collection<?extendsSerializable>idList)用于根據主鍵Id的集合批量刪除數據庫中的記錄。傳入參數是一個Id集合,集合中的每個元素都是待刪除記錄的主鍵IdintdeleteByMap(@Param(
Constants.COLUMN_MAP)
Map<String,Object>columnMap)用于根據字段名和對應值的映射條件刪除數據庫中的記錄。傳入參數是一個Map集合,其中鍵是數據表的字段名,值是待匹配的值。MyBatis-Plus會根據這個映射生成相應的DELETE語句并執(zhí)行12.2.2
通用接口(3)更新方法//根據Id更新intupdateById(@Param("et")Tentity);//根據實體對象和條件構造器更新記錄intupdate(@Param("et")Tentity,@Param("ew")Wrapper<T>updateWrapper);12.2.2
通用接口(4)查詢方法方法說明TselectById(Serializableid)用于根據主鍵Id查詢一條記錄。傳入參數是主鍵Id,返回與主鍵Id對應的實體對象List<T>selectBatchIds(@Param("coll")
Collection<?extendsSerializable>用于根據多個主鍵Id查詢多條記錄。傳入參數是一個包含主鍵Id的集合,返回一個包含查詢結果的實體對象字段表LongselectCount(@Param("ew")
Wrapper<T>queryWrapper)用于根據查詢條件構造器queryWrapper中的條件查詢記錄的總數List<T>selectList(@Param("ew")
Wrapper<T>queryWrapper)用于根據查詢條件構造器queryWrapper中的條件查詢記錄字段表。返回一個包含查詢結果的實體對象字段表12.2.2
通用接口(4)查詢方法方法說明List<T>selectList(IPage<T>page,@Param("ew")Wrapper<T>queryWrapper)用于分頁查詢記錄字段表,傳入參數包括一個分頁對象page和一個查詢條件構造器queryWrapper。分頁對象用于指定頁碼和每頁的記錄數,查詢結果會按照分頁要求返回List<Map<String,Object>>selectMaps(
@Param("ew")Wrapper<T>queryWrapper)用于根據查詢條件構造器queryWrapper中的條件查詢記錄字段表,但返回的是包含字段名和對應值的Map對象的集合,而不是實體對象的集合List<Map<String,Object>>selectMaps(IPage<?extendsMap<String,Object>>page,@Param("ew")Wrapper<T>queryWrapper)用于根據查詢條件構造器queryWrapper中的條件分頁查詢記錄,并將結果封裝在Map集合中12.2.2
通用接口(4)查詢方法方法說明<E>List<E>selectObjs(
@Param("ew")Wrapper<T>
queryWrapper);用于根據查詢條件構造器queryWrapper中的條件查詢記錄字段表,并返回任意類型的對象字段表,該方法通常用于查詢不需要映射到實體類的數據,例如聚合查詢的結果List<T>selectByMap(Map<String,Object>columnMap)用于根據columnMap集合中的鍵值對查詢數據庫中的記錄,其中鍵匹配數據表中的字段名,值匹配字段的值TselectOne(@Param("ew")Wrapper<T>queryWrapper)用于根據條件構造器queryWrapper中的條件查詢單條記錄。與selectList方法不同,selectOne方法預期查詢結果只有一條記錄。如果查詢結果有多條記錄,它通常會拋出一個異常。如果查詢結果為空,則返回null12.2.2
通用接口2.IService接口IService接口在MyBatis-Plus中是一個服務層的通用接口,它封裝了一些常見的增刪改查方法,這使得開發(fā)者在編寫服務層代碼時,無需針對每一個實體類都編寫一套完整的數據庫操作方法,而是通過繼承IService接口,直接調用其提供的方法,從而大大減少了重復代碼的編寫。下面對IService接口的常用方法進行講解。(1)保存方法//保存一條記錄booleansave(Tentity);//批量保存booleansaveBatch(Collection<T>entityList);//批量保存,并指定每批處理的個數booleansaveBatch(Collection<T>entityList,intbatchSize);12.2.2
通用接口(2)刪除方法方法說明booleanremoveById(Serializableid)用于根據主鍵Id刪除數據庫中的記錄,傳入參數是一個Serializable類型的Id,通常這個Id是實體類主鍵字段的值booleanremoveById(Tentity)用于根據entity實體對象的主鍵Id刪除數據庫中的記錄booleanremoveByMap(
Map<String,Object>columnMap)用于根據columnMap集合中的鍵值對匹配數據表中對應字段和值,匹配到就刪除booleanremove(
Wrapper<T>queryWrapper)用于根據wrapper條件構造器中的條件刪除數據庫中的記錄12.2.2
通用接口(3)更新方法方法說明booleanupdate(
Wrapper<T>updateWrapper)用于根據條件構造器updateWrapper的條件更新數據booleanupdate(TupdateEntity,Wrapper<T>whereWrapper)用于根據條件構造器whereWrapper的條件和實體類對象updateEntity更新數據booleanupdateById(Tentity)根據實體對象entity的Id更新數據,entity對象需要包含用于定位需要更新記錄的Id、更新的字段和對應值的booleanupdateBatchById(
Collection<T>entityList)用于根據Id批量更新數據,其中entityList為包含多個實體對象的集合,每個實體對象包含需要更新的字段和對應值,以及用于定位需要更新記錄的Id12.2.2
通用接口(4)保存或更新方法//根據實體對象保存或更新記錄booleansaveOrUpdate(Tentity)//根據實體對象和條件構造器保存或更新記錄booleansaveOrUpdate(Tentity,Wrapper<T>updateWrapper)//根據實體對象列表批量保存或更新記錄booleansaveOrUpdateBatch(Collection<T>entityList)12.2.2
通用接口(5)查詢方法方法說明TgetById(Serializableid)根據給定的id,從數據庫中查詢對應主鍵的記錄TgetOne(Wrapper<T>queryWrapper)根據條件構造器查詢單個實體對象Map<String,Object>getMap(Wrapper<T>queryWrapper)根據Wrapper條件構造器查詢并返回第一條記錄,結果以Map形式表示,其中鍵為字段名,值為字段值List<T>list()查詢所有記錄并以List集合的形式返回所有實體對象List<T>list(
Wrapper<T>queryWrapper)根據Wrapper條件構造器查詢并返回滿足條件的所有實體對象列表12.2.2
通用接口(5)查詢方法方法說明List<T>listByIds(Collection<?extendsSerializable>idList)根據idList集合中的id執(zhí)行批量查詢,將匹配的結果封裝在實體對象的集合中返回List<T>listByMap(
Map<String,Object>columnMap)根據columnMap中的鍵值對執(zhí)行查詢,將匹配的結果封裝在實體對象的集合中返回List<Map<String,Object>>listMaps()不帶條件查詢所有記錄,但結果以List<Map<String,Object>>形式返回,每條記錄被轉換為一個MapList<Map<String,Object>>listMaps(Wrapper<T>queryWrapper)根據Wrapper條件構造器查詢所有記錄,結果以List<Map<String,Object>>形式返回12.2.2
通用接口(5)查詢方法方法說明<EextendsIPage<T>>Epage(Epage)根據參數page對象執(zhí)行分頁查詢,page對象需要設置好分頁參數,如當前頁碼current和每頁大小size。返回一個IPage<T>對象,包含了當前頁的數據列表及分頁信息,如總記錄數、當前頁碼、每頁大小等<EextendsIPage<T>>Epage(Epage,Wrapper<T>queryWrapper)在進行分頁查詢的同時通過queryWrapper條件構造器指定查詢條件<EextendsIPage<Map<String,Object>>>EpageMaps(Epage)根據參數page對象執(zhí)行分頁查詢,但返回結果封裝在Map集合中12.2.3
條件構造器先定一個小目標!
先定一個小目標!掌握MyBatis-Plus的條件構造器,能夠簡述MyBatis-Plus條件構造器的作用、常見的條件構造器、條件構造器常用的方法12.2.3
條件構造器MyBatis-Plus的條件構造器(Wrapper)是一個強大的查詢條件構建工具,它允許開發(fā)者以鏈式調用的方式構建SQL查詢條件,可以動態(tài)地添加查詢條件、排序規(guī)則、分組條件等,從而簡化了復雜查詢的構建過程。12.2.3
條件構造器(1)AbstractWrapper常見的條件構造器所有條件構造器的基類,它定義了一系列條件構造器的通用方法(2)QueryWrapper與UpdateWrapperAbstractWrapper的子類,分別用于構建查詢條件和用于構建更新條件,擴展了特定于查詢或更新的功能(3)LambdaQueryWrapper與LambdaUpdateWrapper分別為QueryWrapper和UpdateWrapper的子類,它們使用Lambda表達式代替字符串形式的字段名12.2.3
條件構造器條件構造器的常用方法。(1)eq()用于構建字段中值等于指定值的條件,方法簽名如下。eq(Rcolumn,Objectval)(2)ne()用于構建字段中值不等于指定值的條件,方法簽名如下。ne(Rcolumn,Objectval)12.2.3
條件構造器(3)gt()用于構建字段中值大于指定值的條件,方法簽名如下。gt(Rcolumn,Objectval)(4)ge()用于構建字段中值大于或等于指定值的條件,方法簽名如下。ge(Rcolumn,Objectval)(5)lt()用于構建字段中值小于某個值的條件,方法簽名如下。lt(Rcolumn,Objectval)12.2.3
條件構造器(6)le()用于構建字段中值小于或等于某個值的條件,方法簽名如下。le(Rcolumn,Objectval)(7)between()用于構建字段中值在指定區(qū)間的條件,方法簽名如下。between(Rcolumn,Objectval1,Objectval2)(8)like()用于構建字段中值包含指定字符串的模糊查詢條件,方法簽名如下。like(Rcolumn,Objectval)12.2.3
條件構造器(9)in()用于構建字段的值在指定組合中的條件,方法簽名如下。in(Rcolumn,Collection<?>value)(10)groupBy()用于構建根據指定字段進行分組的條件,方法簽名如下。groupBy(R...columns)12.2.3
條件構造器QueryWrapper的使用示例如下。QueryWrapper<User>queryWrapper=newQueryWrapper<>();queryWrapper.eq("name","張三")//name字段的值等于張三.like("email","qq")//模糊查詢,email字段的值包含qq.gt("age",18);//age字段的值大于18List<User>userList=userMapper.selectList(queryWrapper);12.2.3
條件構造器假設現(xiàn)在有一個User實體類,其中包含name、age和email屬性,現(xiàn)在基于LambdaQueryWrapper查詢數據表中User對象對應的記錄,示例如下。LambdaQueryWrapper<User>queryWrapper=newLambdaQueryWrapper<>();queryWrapper.eq(User::getName,"張三").lt(User::getAge,35).like(User::getEmail,"qq")List<User>userList=userMapper.selectList(queryWrapper);12.2.3
條件構造器UpdateWrapper的使用示例如下。UpdateWrapper<User>updateWrapper=newUpdateWrapper<>();updateWrapper.eq("id",1)//id字段字段的值等于1.set("name","NewName")//設置name字段的值為NewNameuserMapper.update(updateWrapper);12.2.3
條件構造器假設現(xiàn)在有一個User實體類,其中包含id,name和email屬性,現(xiàn)在基于LambdaUpdateWrapper更新數據表的數據,使用示例如下LambdaUpdateWrapper<User>updateWrapper=newLambdaUpdateWrapper<>();updateWrapper.eq(User::getId,1)//更新的Id.set(User::getName,"NewName")//設置新名字.set(User::getEmail,"newemail@");//設置新郵箱userMapper.update(updateWrapper);MyBatis-Plus基本使用12.312.3
MyBatis-Plus基本使用先定一個小目標!
先定一個小目標!掌握MyBatis-Plus基本使用,能夠在程序中使用MyBatis-Plus通用接口的方法和條件構造器實現(xiàn)增刪改查操作12.3
MyBatis-Plus基本使用1.引入依賴在項目chapter12的pom.xml文件中引入Spring、SpringMVC、Lombok的依賴,具體如下。引入的依賴源代碼下面通過一個案例演示MyBatis-Plus增刪改查等基本使用。12.3
MyBatis-Plus基本使用2.創(chuàng)建核心配置文件在項目的src/main/resources目錄下創(chuàng)建一個名稱為mybatis-config.xml的文件作為MyBatis-Plus的核心配置文件,在mybatis-config.xml配置文件中配置數據庫連接信息、映射器的相關信息,如文件12-8所示。文件12-8mybatis-config.xml源代碼12.3
MyBatis-Plus基本使用3.Lombok環(huán)境設置項目中使用了Lombok提供的功能,在運行項目代碼時,除了在pom.xml文件中引入Lombok對應的依賴之外,還需要確保IDEA中有安裝Lombok的插件。大部分版本的IDEA都默認集成好了Lombok的插件,讀者無需重復安裝。讀者如果不確定自己的IDEA是否已經安裝Lombok的插件,可以在IDEA的Settings→Plugins→Installed中查看。如果沒有安裝可以在Settings→Plugins→Marketplace中搜索Lombok插件進行安裝即可,安裝相對比較簡單,在此就不再進行演示。12.3
MyBatis-Plus基本使用3.Lombok環(huán)境設置Lombok主要是通過注解在編譯時動態(tài)地生成代碼,對此為了確保Lombok的注解在編譯階段被正確處理,可以在IDEA中開啟注解處理器。在Settings→Build,Execution,Deployment→Compiler→AnnotationProcessors中勾選Enableannotationprocessing設置開啟注解處理器。12.3
MyBatis-Plus基本使用4.測試查詢方法在項
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司安全生產巡查制度
- 安全生產執(zhí)法證管理制度
- 駝峰鄉(xiāng)機關管理制度建設(3篇)
- 2025年云上數據開發(fā)有限公司招聘筆試真題
- 2026江西投資集團全資子公司招聘1人備考題庫含答案詳解
- 2026廣東東莞市檔案館招聘編外聘用人員1人備考題庫及答案詳解1套
- 2026年上半年云南特殊教育職業(yè)學院招聘人員備考題庫(6人)附答案詳解
- 2025福州工業(yè)園區(qū)開發(fā)集團有限公司設計勘察分公司項目建設合同制人員招聘4人備考題庫及完整答案詳解
- 2025陜西西安交通大學科技與教育發(fā)展研究院科研人員招聘2人備考題庫有完整答案詳解
- 2026北京海淀區(qū)婦幼保健院人才招聘備考題庫及答案詳解(奪冠系列)
- 飛行汽車課件
- (完整)鋼筋混凝土擋土墻專項施工方案
- 湖南省長沙市2025年新高考適應性一??荚?化學試卷(含答案)
- 警務英語教學課件
- 《醫(yī)學影像診斷報告書寫指南》(2025版)
- 旋挖鉆機進場安全培訓課件
- 2025年高純石墨碳材行業(yè)研究報告及未來行業(yè)發(fā)展趨勢預測
- 2025至2030中國超高鎳正極材料市場經營格局與未來銷售前景預測報告
- 2025至2030中國立體定向儀行業(yè)產業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 代辦煙花爆竹經營許可證協(xié)議合同
- 中考語文文言文150個實詞及虛詞默寫表(含答案)
評論
0/150
提交評論