版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第10章SpringBoot單元測試學習目的與要求本章重點講解SpringBoot單元測試的相關(guān)內(nèi)容,包括Junit5的注解、斷言以及單元測試用例。通過本章的學習,掌握Junit5的注解與斷言機制的用法,掌握單元測試用例的編寫?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
目錄10.1Junit510.2單元測試用例10.3使用Postman測試Controller層《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.1.1Junit5簡介JUnit是一個Java語言的單元測試框架,是由ErichGamma和KentBeck編寫的一個回歸測試框架(RegressionTestingFramework)。Junit測試是程序員測試,即所謂白盒測試,因為程序員知道被測試的軟件如何(How)完成功能和完成什么樣(What)的功能。多數(shù)Java開發(fā)環(huán)境(如:Eclipse、IntelliJIDEA)都已經(jīng)集成了JUnit作為單元測試工具。JUnit5是由JUnitPlatform、JUnitJupiter以及JUnitVintage三部分組成,Java
運行環(huán)境的最低版本是Java8。JUnitPlatform:是Junit提供的平臺功能模塊,通過JUnitPlatform,其他的測試引擎都可以接入Junit實現(xiàn)接口和執(zhí)行。JUnitJUpiter:是Junit5的核心,是一個基于JUnitPlatform的引擎實現(xiàn),JUnitJUpiter包含許多豐富的新特性來使得自動化測試更加方便和強大。JUnitVintage:是兼容JUnit3、JUnit4版本的測試引擎,使得舊版本的自動化測試也可以在Junit5下正常運行?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.1.2Junit5注解1.@Test@Test注解表示方法是單元測試方法(返回值都是void)。但是與JUnit4的@Test不同,它的職責非常單一不能聲明任何屬性,拓展的測試將會由Jupiter提供額外測試。示例代碼如下:@TestvoidtestSelectAllUser(){}2.@RepeatedTest@RepeatedTest注解表示單元測試方法可重復執(zhí)行,示例代碼如下:@Test@RepeatedTest(value=5)voidfirstTest(){//該測試方法重復執(zhí)行5次。
System.out.println(55555);}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.1.2Junit5注解3.@DisplayName@DisplayName注解為單元測試方法設(shè)置展示名稱(默認為方法名),示例代碼如下:@Test@DisplayName("測試用戶名查詢方法")voidfindByUname(){}4.@BeforeEach@BeforeEach注解表示在每個單元測試方法之前執(zhí)行,示例代碼如下:@BeforeEachvoidsetUp(){}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.1.2Junit5注解5.@AfterEach@AfterEach注解表示在每個單元測試方法之后執(zhí)行,示例代碼如下:@AfterEachvoidtearDown(){}6.@BeforeAll@BeforeAll注解表示在所有單元測試方法之前執(zhí)行。被@BeforeAll注解的方法,必須為靜態(tài)方法,該靜態(tài)方法將在當前測試類的所有@Test方法前執(zhí)行一次。示例代碼如下:@BeforeAllstaticvoidsuperBefore(){System.out.println("最前面執(zhí)行");}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.1.2Junit5注解7.@AfterAll@AfterAll注解表示在所有單元測試方法之后執(zhí)行。被@AfterAll注解的方法,必須為靜態(tài)方法,該靜態(tài)方法將在當前測試類的所有@Test方法后執(zhí)行一次。示例代碼如下:@AfterAllstaticvoidsuperAfter(){System.out.println("最后面執(zhí)行");}8.@Disabled@Disabled注解表示單元測試方法不執(zhí)行,類似于JUnit4中的@Ignore。9.@Timeout@Timeout注解表示單元測試方法運行時,如果超過了指定時間將會返回錯誤。示例代碼如下:@Test@Timeout(value=500,unit=TimeUnit.MILLISECONDS)voidtestTimeout()throwsInterruptedException{Thread.sleep(600);}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.1.3Junit5斷言Junit5的斷言方法都是org.junit.jupiter.api.Assertions的靜態(tài)方法(返回值為void)。1.a(chǎn)ssertEquals和assertNotEqualsAssertions.assertEquals(Objectexpected,Objectactual,Stringmessage)方法第一個參數(shù)是期望值,第二個參數(shù)是待測試方法的實際返回值,第三個參數(shù)message是可選的,表示判斷失敗的提示信息。判斷兩者的值是否相等,換言之不判斷類型是否相等。inta=1;longb=1L;
//雖然a和b類型不同,但依舊判斷是成功的,當a與b不相等時,測試不通過。assertEquals(a,b,"a與b不相等");MyUserau=newMyUser();MyUserbu=newMyUser();//雖然au和bu是指向不同的對象,但它們值相同,依舊判斷是成功的。assertEquals(au,bu,"au與bu的對象屬性值不相等");bu.setUname("ch");assertEquals(au,bu,"au與bu的對象屬性值不相等");《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.1.3Junit5斷言2.a(chǎn)ssertSame和assertNotSameassertSame與assertEquals的區(qū)別,assertSame不僅判斷值是否相同,還判斷類型是否相同。對于對象,判斷兩者的引用是否是同一個。inta=1;longb=1L;longc=1L;//b和c比較,判斷成功,因為他們的類型也相同。assertSame(b,c,"測試失敗");//a和b比較,判斷失敗,因為他們的類型不相同。assertSame(a,b,"測試失敗");MyUserau=newMyUser();MyUserbu=newMyUser();MyUsercu=bu;//bu和cu比較,判斷成功,因為他們的引用是同一個。assertSame(bu,cu,"測試失敗");assertSame(au,bu,"測試失敗");《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.1.3Junit5斷言3.a(chǎn)ssertNull和assertNotNullAssertions.assertNull(Objectactual)實際測試值是null,則單元測試成功。4.a(chǎn)ssertTrue和assertFalseAssertions.assertTrue(booleancondition)實際測試值是true,則單元測試成功?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.1.3Junit5斷言5.a(chǎn)ssertThrowsAssertions.assertThrows(Class<T>expectedType,Executableexecutable,Stringmessage)判斷executable方法執(zhí)行過程中是否拋出指定異常expectedType。如果沒有拋出異常,或者拋出的異常類型不對,則單元測試失敗。@TestvoidtestAssertThrows(){
assertThrows(ArithmeticException.class,()->errorMethod());}privatevoiderrorMethod(){inta[]={1,2,3,4,5};for(inti=0;i<=5;i++){System.out.println(a[i]);}}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.1.3Junit5斷言6.a(chǎn)ssertDoesNotThrowassertDoesNotThrow(Executableexecutable)判斷測試方法是否拋出異常,如果沒有拋出任何異常,則單元測試成功。@TestvoidtestAssertDoesNotThrow(){assertDoesNotThrow(()->rightMethod());}privatevoidrightMethod(){inta=1/1;}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.1.3Junit5斷言7.a(chǎn)ssertAllassertAll(Executable...executables)判斷一組斷言是否都成功,都成功,整個單元測試成功。@TestvoidtestAll(){
assertAll(()->assertEquals(1,1),()->assertNotEquals(1,2),()->assertNull(null));}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
目錄10.1Junit510.2單元測試用例10.3使用Postman測試Controller層《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.2.1測試環(huán)境構(gòu)建在SpringBootWeb應用中,已經(jīng)集成了Junit5和JSON相關(guān)的JAR包,所以可以直接進行單元測試,下面構(gòu)建一個SpringBootWeb應用。1.創(chuàng)建SpringBootWeb應用創(chuàng)建基于Lombok依賴的SpringBootWeb應用ch10。2.修改pom.xml文件在pom.xml文件中添加MySQL連接器與MyBatis-Plus依賴?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
3.設(shè)置Web應用ch10的上下文路徑及數(shù)據(jù)源配置信息server.servlet.context-path=/ch10#數(shù)據(jù)庫地址spring.datasource.url=jdbc:mysql://localhost:3306/springtest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8#數(shù)據(jù)庫用戶名spring.datasource.username=root#數(shù)據(jù)庫密碼spring.datasource.password=root#數(shù)據(jù)庫驅(qū)動spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#設(shè)置包別名(在Mapper映射文件中直接使用實體類名)mybatis-plus.type-aliases-package=com.ch10.entity#在控制臺輸出SQL語句日志.ch10.mapper=debug#讓控制器輸出的JSON字符串格式更美觀spring.jackson.serialization.indent-output=true《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
4.創(chuàng)建實體類創(chuàng)建名為com.ch10.entity的包,并在該包中創(chuàng)建MyUser實體類。該實體類與【例7-5】中的相同,不再贅述。5.創(chuàng)建數(shù)據(jù)訪問接口創(chuàng)建名為com.ch10.mapper的包,并在該包中創(chuàng)建UserMapper接口。UserMapper接口通過繼承BaseMapper<MyUser>接口,對實體類MyUser對應的數(shù)據(jù)表user進行CRUD操作。UserMapper接口的代碼與【例7-5】中的相同,不再贅述。6.創(chuàng)建Service接口及實現(xiàn)類創(chuàng)建名為com.ch10.service的包,并在該包中創(chuàng)建UserService接口及實現(xiàn)類UserServiceImpl。UserService接口及實現(xiàn)類UserServiceImpl的代碼與【例7-5】中的相同,不再贅述?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
7.創(chuàng)建控制器類MyUserController
@AutowiredprivateUserMapperuserMapper;@AutowiredprivateUserServiceuserService;@GetMapping("/selectAllUsers")publicList<MyUser>selectAllUsers(){returnuserMapper.selectList(null);}@PostMapping("/addAUser")publicMyUseraddAUser(MyUsermu){//實體類主鍵屬性使用@TableId注解后,主鍵自動回填
intresult=userMapper.insert(mu);returnmu;}@PutMapping("/updateAUser")publicbooleanupdateAUser(MyUsermu){returnuserService.updateById(mu);
}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.在應用程序的主類中掃描Mapper接口@SpringBootApplication@MapperScan(basePackages={"com.ch10.mapper"})publicclassCh10Application{publicstaticvoidmain(String[]args){SpringApplication.run(Ch191Application.class,args);}}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.2.2測試Mapper接口在IntelliJIDEA中,選中類或接口的名字,按下快捷鍵Ctrl+Shift+T創(chuàng)建測試類,此時生成的測試類在test文件夾里面,測試方法都是void方法。如圖10.1所示的CreateTest窗口。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.2.2測試Mapper接口@SpringBootTest用于SpringBoot應用測試,它默認根據(jù)包名逐級往上找,一直找到SpringBoot主程序(包含@SpringBootApplication注解的類),并在單元測試時啟動該主程序來創(chuàng)建Spring上下文環(huán)境。所以,需要在單元測試類上使用@SpringBootTest注解標注后,才能進行單元測試。在測試類UserMapperTest中,使用Junit5的注解與斷言進行Mapper接口方法的測試。@AutowiredprivateUserMapperuserMapper;@TestvoidgetOne(){ MyUsermu=userMapper.selectById(1);
assertEquals(mu.getUid(),1,"a與b不相等");
}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.2.3測試Service層單元測試Service層與測試Mapper接口類似,需要特別考慮Service是否依賴其他還未開發(fā)完畢的Service(第三方接口)。如果依賴其他還未開發(fā)完畢的Service,我們需要使用Mockito(JavaMock測試框架,用于模擬任何Spring管理的Bean)來模擬未完成的Service。假設(shè),應用ch10的UserServiceImpl類依賴一個還未開發(fā)完畢的第三方接口UsexService。接口UsexService中有一個獲得用戶性別的接口方法getUsex。publicinterfaceUsexService{StringgetUsex(intid);}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.2.3測試Service層創(chuàng)建UserServiceImpl的測試類UserServiceImplTest,在UserServiceImplTest類中,使用Mockito.mock方法模擬第三方接口UsexService的對象,并進行測試。@SpringBootTestclassUserServiceImplTest{@AutowiredprivateUserServiceuserService;//模擬第三方接口UsexService對象privateUsexServiceusexService=Mockito.mock(UsexService.class);@TestvoidtestGetOne(){intuid=1;StringexpectedUsex="女";/*given是BDDMockito的一個靜態(tài)方法,用來模擬一個Service方法調(diào)用返回,anyInt()表示可以傳入任何參數(shù),willReturn方法說明這個調(diào)用將返回女。*/
BDDMockito.given(usexService.getUsex(anyInt())).willReturn(expectedUsex);
assertEquals(expectedUsex,userService.getById(uid).getUsex(),"測試失敗,與期望值不一致");}}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
目錄10.1Junit510.2單元測試用例10.3使用Postman測試Controller層《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
10.3使用Postman測試Controller層Postman是一個接口測試工具,在做接口測試時,Postman相當于一個客戶端,它可以模擬用戶發(fā)起的各類HTTP請求,將請求數(shù)據(jù)發(fā)送至服務端,獲取對應的響應結(jié)果,從而驗證響應中的結(jié)果數(shù)據(jù)是否和預期值相匹配。Postman主要是用來模擬各種HTTP請求的(如:get/post/delete/put..等等),Postman與瀏覽器的區(qū)別在于有的瀏覽器不能輸出JSON格式,而Postman更直觀接口返回的結(jié)果??蓮墓倬W(wǎng)/下載對應的Postman安裝程序。安裝成功后,不需要創(chuàng)建賬號即可使用。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
1.測試selectAllUsers方法《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
2.測試addAUser方法《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
3.測試updateAUser方法《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
4.測試deleteAUser方法《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
5.測試getOne方法《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
本章小結(jié)本章首先重點講解了Junit5的常用注解與斷言;其次,詳細講解了在IntelliJIDEA中如何使用Junit5進行Mapper接口與Service層的單元測試;最后,介紹了一個針對Controller層測試的接口測試工具Postman,此測試工具在前后端分離開發(fā)中,廣泛應用于RESTful接口測試?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
學習資源推薦第11章電子商務平臺的設(shè)計與實現(xiàn)(SpringBoot+Thymleaf+MyBatis)學習目的與要求本章通過一個小型的電子商務平臺,講述如何使用SpringBoot+Thymeleaf+MyBatis開發(fā)一個Web應用,其中主要涉及的技術(shù)包括Spring、SpringMVC、SpringBoot框架技術(shù)、MyBatis持久層技術(shù)、Thymeleaf表現(xiàn)層技術(shù)。通過本章的學習,掌握基于Thymeleaf+MyBatis的SpringBootWeb應用開發(fā)的流程、方法以及技術(shù)?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
目錄11.1系統(tǒng)設(shè)計11.2數(shù)據(jù)庫設(shè)計11.3系統(tǒng)管理11.4組件設(shè)計11.5后臺管理子系統(tǒng)的實現(xiàn)11.6前臺電子商務子系統(tǒng)的實現(xiàn)《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.1系統(tǒng)設(shè)計電子商務平臺分為兩個子系統(tǒng),一是后臺管理子系統(tǒng),一是電子商務子系統(tǒng)。下面分別說明這兩個子系統(tǒng)的功能需求與模塊劃分。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
1.后臺管理子系統(tǒng)后臺管理子系統(tǒng)要求管理員登錄成功后,才能對商品進行管理,包括添加商品、查詢商品、修改商品以及刪除商品。除商品管理外,管理員還需要對商品類型、注冊用戶以及用戶的訂單等進行管理?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
2.電子商務子系統(tǒng)1)非注冊用戶非注冊用戶或未登錄用戶具有的功能如下:瀏覽首頁、查看商品詳情以及搜索商品的功能。2)用戶成功登錄的用戶除具有未登錄用戶具有的功能外,還具有購買商品、查看購物車、收藏商品、查看訂單、查看收藏以及查看用戶個人信息的功能?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.1.2系統(tǒng)模塊劃分《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
后臺管理子系統(tǒng)商品管理銷量統(tǒng)計用戶管理安全退出新增商品刪除商品修改商品查詢商品查詢用戶刪除用戶類型管理新增類型刪除類型查詢類型月統(tǒng)計類型統(tǒng)計11.1.2系統(tǒng)模塊劃分《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
目錄11.1系統(tǒng)設(shè)計11.2數(shù)據(jù)庫設(shè)計11.3系統(tǒng)管理11.4組件設(shè)計11.5后臺管理子系統(tǒng)的實現(xiàn)11.6前臺電子商務子系統(tǒng)的實現(xiàn)《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.2數(shù)據(jù)庫設(shè)計系統(tǒng)采用加載純Java數(shù)據(jù)庫驅(qū)動程序的方式連接MySQL8數(shù)據(jù)庫。在MySQL8中創(chuàng)建數(shù)據(jù)庫ch11,并在ch11中創(chuàng)建8張與系統(tǒng)相關(guān)的數(shù)據(jù)表:ausertable、busertable、carttable、focustable、goodstable、goodstype、orderdetail和orderbasetable。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.2.1數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計1.管理員包括管理員ID、用戶名和密碼。管理員的用戶名和密碼由數(shù)據(jù)庫管理員預設(shè),不需要注冊。2.用戶包括用戶ID、郵箱和密碼。注冊用戶的郵箱不能相同,用戶ID唯一。3.商品類型包括類型ID和類型名稱。商品類型由數(shù)據(jù)庫管理員管理,包括新增和刪除管理。4.商品包括商品編號、名稱、原價、現(xiàn)價、庫存、圖片以及類型。其中,商品編號唯一,類型與“3.商品類型”關(guān)聯(lián)。5.購物車包括購物車ID、用戶ID、商品編號以及購買數(shù)量。其中,購物車ID唯一,用戶ID與“2.用戶”關(guān)聯(lián),商品編號與“4.商品”關(guān)聯(lián)?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.2.1數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計6.收藏商品包括ID、用戶ID、商品編號以及收藏時間。其中,ID唯一,用戶ID與“2.用戶”關(guān)聯(lián),商品編號與“4.商品”關(guān)聯(lián)。7.訂單基礎(chǔ)信息包括訂單編號、用戶ID、訂單金額、訂單狀態(tài)以及下單時間。其中,訂單編號唯一,用戶ID與“2.用戶”關(guān)聯(lián)。8.訂單詳情包括訂單編號、商品編號以及購買數(shù)量。其中,訂單編號與“7.訂單基礎(chǔ)信息”關(guān)聯(lián),商品編號與“4.商品”關(guān)聯(lián)?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.2.1數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.2.2數(shù)據(jù)邏輯結(jié)構(gòu)設(shè)計《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
字
段含義類
型長
度是否為空id管理員ID(PK自增)int0noaname用戶名varchar50noapwd密碼varchar50no字
段含義類
型長
度是否為空id用戶ID(PK自增)int0nobemailE-mailvarchar50nobpwd密碼varchar50no字
段含義類
型長
度是否為空idID(PK自增)int0notypename名稱varchar50no字
段含義類
型長
度是否為空id編號(PK自增)int0nogname名稱varchar50nogoprice原價double0nogrprice現(xiàn)價double0nogstore庫存int0nogpicture圖片varchar50
isRecommend是否推薦tinyint0noisAdvertisement是否廣告tinyint0nogoodstype_id類型(FK)int0no11.2.2數(shù)據(jù)邏輯結(jié)構(gòu)設(shè)計《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
字
段含義類
型長
度是否為空idID(PK自增)int0nobusertable_id用戶ID(FK)int0nogoodstable_id商品編號(FK)int0noshoppingnum購買數(shù)量int0no字
段含義類
型長度是否為空idID(PK自增)int0nogoodstable_id商品ID(FK)int0nobusertable_id用戶ID(FK)int0nofocustime收藏時間datetime0no字
段含義類
型長
度是否為空idID(PK自增)int0nobusertable_id用戶ID(FK)int0noamount金額double0nostatus訂單狀態(tài)tinyint0noorderdate下單時間datetime0no字
段含義類
型長
度是否為空idID(PK自增)int0noorderbasetable_id訂單編號(FK)int0nogoodstable_id商品編號(FK)int0noshoppingnum購買數(shù)量int0no目錄11.1系統(tǒng)設(shè)計11.2數(shù)據(jù)庫設(shè)計11.3系統(tǒng)管理11.4組件設(shè)計11.5后臺管理子系統(tǒng)的實現(xiàn)11.6前臺電子商務子系統(tǒng)的實現(xiàn)《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.3.1添加相關(guān)依賴新建一個基于Thymeleaf+MyBatis的SpringBootWeb應用ch11,在ch11應用中開發(fā)本系統(tǒng)。除了IntelliJIDEA快速創(chuàng)建基于Thymeleaf+MyBatis的SpringBootWeb應用自帶的spring-boot-starter-thymeleaf、mybatis-spring-boot-starter和spring-boot-starter-web依賴外,還需要向ch11應用的pom.xml文件中添加表單驗證依賴hibernate-validator、LombokJava增強庫依賴以及MySQL連接器依賴,具體見源代碼ch11的pom.xml文件?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.3.2HTML頁面及靜態(tài)資源管理系統(tǒng)由后臺管理和電子商務兩個子系統(tǒng)組成,為了方便管理,兩個子系統(tǒng)的HTML頁面分開存放。在src/main/resources/templates/admin目錄下存放與后臺管理子系統(tǒng)相關(guān)的HTML頁面;在src/main/resources/templates/user目錄下存放與電子商務子系統(tǒng)相關(guān)的HTML頁面;在src/main/resources/static目錄下存放與整個系統(tǒng)相關(guān)的BootStrap及jQuery。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
1.后臺管理子系統(tǒng)管理員在瀏覽器的地址欄中輸入http://localhost:8080/ch11/admin/toLogin訪問登錄頁面,登錄成功后,進入后臺商品管理主頁面(adminGoods.html),adminGoods.html的運行效果如圖11.4所示?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
2.電子商務子系統(tǒng)注冊用戶或游客在瀏覽器的地址欄中輸入http://localhost:8080/ch11可以訪問電子商務子系統(tǒng)的首頁(index.html),index.html的運行效果如圖11.5所示?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.3.3應用的包結(jié)構(gòu)1.com.ch.ch11包該包中包括應用的主程序類Ch11Application、統(tǒng)一異常處理類GlobalExceptionHandleController以及自定義異常類NoLoginException。2.com.ch.ch11.controller包系統(tǒng)的控制器類都在該包中,后臺管理相關(guān)的控制器類在admin子包中,電子商務相關(guān)的控制器類在before子包中。3.com.ch.ch11.entity包實體類存放在該包中?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.3.3應用的包結(jié)構(gòu)4.com.ch.ch11.repository包該包中存放的Java接口程序是實現(xiàn)數(shù)據(jù)庫的持久化操作。每個接口方法與SQL映射文件中的id相同。后臺管理相關(guān)的數(shù)據(jù)庫操作在admin子包中,電子商務相關(guān)的數(shù)據(jù)庫操作在before子包中。5.com.ch.ch11.service包service包中有兩個子包:admin和before,admin子包存放后臺管理相關(guān)業(yè)務層的接口與實現(xiàn)類;before子包存放電子商務相關(guān)業(yè)務層的接口與實現(xiàn)類。6.com.ch.ch11.util包該包中存放的是系統(tǒng)的工具類?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.3.4配置文件server.servlet.context-path=/ch11spring.datasource.url=jdbc:mysql://localhost:3306/ch11?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8spring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivermybatis.type-aliases-package=com.ch.ch11.entity#告訴系統(tǒng)在哪里去找mapper.xml文件(映射文件)mybatis.mapperLocations=classpath:mappers/*.xml#在控制臺輸出SQL語句日志.ch.ch11.repository=debug#關(guān)閉Thymeleaf模板引擎緩存(使頁面熱部署),默認是開啟的spring.thymeleaf.cache=false#上傳文件時,默認單個上傳文件大小是1MB,max-file-size設(shè)置單個上傳文件大小spring.servlet.multipart.max-file-size=50MB#默認總文件大小是10MB,max-request-size設(shè)置總上傳文件大小spring.servlet.multipart.max-request-size=500MB《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
目錄11.1系統(tǒng)設(shè)計11.2數(shù)據(jù)庫設(shè)計11.3系統(tǒng)管理11.4組件設(shè)計11.5后臺管理子系統(tǒng)的實現(xiàn)11.6前臺電子商務子系統(tǒng)的實現(xiàn)《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.4組件設(shè)計本系統(tǒng)的組件包括管理員登錄權(quán)限驗證控制器、前臺用戶登錄權(quán)限驗證控制器、驗證碼、統(tǒng)一異常處理以及工具類?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.4.1管理員登錄權(quán)限驗證從系統(tǒng)分析得知,管理員成功登錄后,才能管理商品、商品類型、用戶、訂單等功能模塊。因此,本系統(tǒng)需要對這些功能模塊的操作進行管理員登錄權(quán)限控制。在com.ch.ch11.controller.admin包中創(chuàng)建AdminBaseController控制器類,該類中有一個@ModelAttribute注解的方法isLogin。isLogin方法的功能是判斷管理員是否已成功登錄。需要進行管理員登錄權(quán)限控制的控制器類繼承AdminBaseController類即可,因為帶有@ModelAttribute注解的方法首先被控制器執(zhí)行。AdminBaseController控制器類的核心代碼如下:@ControllerpublicclassAdminBaseController{ @ModelAttributepublicvoidisLogin(HttpSessionsession)throwsNoLoginException{if(session.getAttribute("auser")==null){thrownewNoLoginException("沒有登錄");}}}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.4.2前臺用戶登錄權(quán)限驗證從系統(tǒng)分析得知,用戶成功登錄后,才能購買商品、收藏商品、查看購物車、我的訂單以及個人信息。與管理員登錄權(quán)限驗證同理,在com.ch.ch11.controller.before包中創(chuàng)建BeforeBaseController控制器類,該類中有一個@ModelAttribute注解的方法isLogin。isLogin方法的功能是判斷前臺用戶是否已成功登錄。需要進行前臺用戶登錄權(quán)限控制的控制器類繼承BeforeBaseController類即可。BeforeBaseController控制器類的代碼與AdminBaseController基本一樣,為節(jié)省篇幅,不再贅述?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.4.3驗證碼本系統(tǒng)驗證碼的使用步驟如下:1.創(chuàng)建產(chǎn)生驗證碼的控制器類在com.ch.ch11.controller.before包中,創(chuàng)建產(chǎn)生驗證碼的控制器類ValidateCodeController,具體代碼參見本書提供的源程序ch11。2.使用驗證碼在需要驗證碼的HTML頁面中,調(diào)用產(chǎn)生驗證碼的控制器顯示驗證碼,示例代碼片段如下:<imgth:src="@{/validateCode}"id="mycode">《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.4.4統(tǒng)一異常處理使用注解@ControllerAdvice和@ExceptionHandler創(chuàng)建統(tǒng)一異常處理類GlobalExceptionHandleController。使用注解@ControllerAdvice的類是一個增強的Controller類,在增強的控制器類中使用@ExceptionHandler注解的方法對所有控制器類進行統(tǒng)一處理異常。核心代碼如下:@ControllerAdvicepublicclassGlobalExceptionHandleController{ @ExceptionHandler(value=Exception.class) publicStringexceptionHandler(Exceptione,Modelmodel){ Stringmessage=""; //數(shù)據(jù)庫異常
if(einstanceofSQLException){ message="數(shù)據(jù)庫異常"; }elseif(einstanceofNoLoginException){ message="未登錄異常"; }else{//未知異常
message="未知異常"; } model.addAttribute("mymessage",message); return"myError"; }}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.4.5工具類本系統(tǒng)使用的工具類有兩個:MD5Util和MyUtil。MD5Util工具用來對明文密碼加密,MyUtil工具里包含文件重命名和獲得用戶信息兩個功能。MD5Util和MyUtil的代碼參見本書提供的源程序ch11。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
目錄11.1系統(tǒng)設(shè)計11.2數(shù)據(jù)庫設(shè)計11.3系統(tǒng)管理11.4組件設(shè)計11.5后臺管理子系統(tǒng)的實現(xiàn)11.6前臺電子商務子系統(tǒng)的實現(xiàn)《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.5.1管理員登錄《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.5.2類型管理《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.5.3添加商品《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.5.4查詢商品《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
11.5.5修
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報參考:金銀繡藝術(shù)特征及其傳承創(chuàng)新研究
- 二零二五版能源設(shè)施安全防護勞務分包協(xié)議3篇
- 二零二五版房地產(chǎn)開發(fā)經(jīng)營項目環(huán)境保護合同范本3篇
- 2025年常州貨運資格證在哪里練題
- 二零二五版毛竹砍伐與林業(yè)碳交易市場接入合同4篇
- 2025年光伏發(fā)電項目投資合作合同模板4篇
- 二零二五年度出租車公司車輛融資租賃合同5篇
- 二零二五年度農(nóng)產(chǎn)品電商平臺合作協(xié)議6篇
- 2025年度智能倉儲物流系統(tǒng)承包經(jīng)營協(xié)議書4篇
- 二零二五年度企業(yè)信用擔保合同模板:降低融資風險2篇
- 課題申報書:GenAI賦能新質(zhì)人才培養(yǎng)的生成式學習設(shè)計研究
- 駱駝祥子-(一)-劇本
- 全國醫(yī)院數(shù)量統(tǒng)計
- 《中國香文化》課件
- 2024年醫(yī)美行業(yè)社媒平臺人群趨勢洞察報告-醫(yī)美行業(yè)觀察星秀傳媒
- 第六次全國幽門螺桿菌感染處理共識報告-
- 天津市2023-2024學年七年級上學期期末考試數(shù)學試題(含答案)
- 經(jīng)濟學的思維方式(第13版)
- 盤錦市重點中學2024年中考英語全真模擬試卷含答案
- 手衛(wèi)生依從性調(diào)查表
- 湖北教育出版社四年級下冊信息技術(shù)教案
評論
0/150
提交評論