版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章SpringBoot单元测试学习目的与要求本章重点讲解SpringBoot单元测试的相关内容,包括Junit5的注解、断言以及单元测试用例。通过本章的学习,掌握Junit5的注解与断言机制的用法,掌握单元测试用例的编写。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录10.1Junit510.2单元测试用例10.3使用Postman测试Controller层《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.1Junit5简介JUnit是一个Java语言的单元测试框架,是由ErichGamma和KentBeck编写的一个回归测试框架(RegressionTestingFramework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。多数Java开发环境(如:Eclipse、IntelliJIDEA)都已经集成了JUnit作为单元测试工具。JUnit5是由JUnitPlatform、JUnitJupiter以及JUnitVintage三部分组成,Java
运行环境的最低版本是Java8。JUnitPlatform:是Junit提供的平台功能模块,通过JUnitPlatform,其他的测试引擎都可以接入Junit实现接口和执行。JUnitJUpiter:是Junit5的核心,是一个基于JUnitPlatform的引擎实现,JUnitJUpiter包含许多丰富的新特性来使得自动化测试更加方便和强大。JUnitVintage:是兼容JUnit3、JUnit4版本的测试引擎,使得旧版本的自动化测试也可以在Junit5下正常运行。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.2Junit5注解1.@Test@Test注解表示方法是单元测试方法(返回值都是void)。但是与JUnit4的@Test不同,它的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试。示例代码如下:@TestvoidtestSelectAllUser(){}2.@RepeatedTest@RepeatedTest注解表示单元测试方法可重复执行,示例代码如下:@Test@RepeatedTest(value=5)voidfirstTest(){//该测试方法重复执行5次。
System.out.println(55555);}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.2Junit5注解3.@DisplayName@DisplayName注解为单元测试方法设置展示名称(默认为方法名),示例代码如下:@Test@DisplayName("测试用户名查询方法")voidfindByUname(){}4.@BeforeEach@BeforeEach注解表示在每个单元测试方法之前执行,示例代码如下:@BeforeEachvoidsetUp(){}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.2Junit5注解5.@AfterEach@AfterEach注解表示在每个单元测试方法之后执行,示例代码如下:@AfterEachvoidtearDown(){}6.@BeforeAll@BeforeAll注解表示在所有单元测试方法之前执行。被@BeforeAll注解的方法,必须为静态方法,该静态方法将在当前测试类的所有@Test方法前执行一次。示例代码如下:@BeforeAllstaticvoidsuperBefore(){System.out.println("最前面执行");}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.2Junit5注解7.@AfterAll@AfterAll注解表示在所有单元测试方法之后执行。被@AfterAll注解的方法,必须为静态方法,该静态方法将在当前测试类的所有@Test方法后执行一次。示例代码如下:@AfterAllstaticvoidsuperAfter(){System.out.println("最后面执行");}8.@Disabled@Disabled注解表示单元测试方法不执行,类似于JUnit4中的@Ignore。9.@Timeout@Timeout注解表示单元测试方法运行时,如果超过了指定时间将会返回错误。示例代码如下:@Test@Timeout(value=500,unit=TimeUnit.MILLISECONDS)voidtestTimeout()throwsInterruptedException{Thread.sleep(600);}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.3Junit5断言Junit5的断言方法都是org.junit.jupiter.api.Assertions的静态方法(返回值为void)。1.assertEquals和assertNotEqualsAssertions.assertEquals(Objectexpected,Objectactual,Stringmessage)方法第一个参数是期望值,第二个参数是待测试方法的实际返回值,第三个参数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从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.3Junit5断言2.assertSame和assertNotSameassertSame与assertEquals的区别,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从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.3Junit5断言3.assertNull和assertNotNullAssertions.assertNull(Objectactual)实际测试值是null,则单元测试成功。4.assertTrue和assertFalseAssertions.assertTrue(booleancondition)实际测试值是true,则单元测试成功。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.3Junit5断言5.assertThrowsAssertions.assertThrows(Class<T>expectedType,Executableexecutable,Stringmessage)判断executable方法执行过程中是否抛出指定异常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从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.3Junit5断言6.assertDoesNotThrowassertDoesNotThrow(Executableexecutable)判断测试方法是否抛出异常,如果没有抛出任何异常,则单元测试成功。@TestvoidtestAssertDoesNotThrow(){assertDoesNotThrow(()->rightMethod());}privatevoidrightMethod(){inta=1/1;}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.3Junit5断言7.assertAllassertAll(Executable...executables)判断一组断言是否都成功,都成功,整个单元测试成功。@TestvoidtestAll(){
assertAll(()->assertEquals(1,1),()->assertNotEquals(1,2),()->assertNull(null));}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录10.1Junit510.2单元测试用例10.3使用Postman测试Controller层《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.2.1测试环境构建在SpringBootWeb应用中,已经集成了Junit5和JSON相关的JAR包,所以可以直接进行单元测试,下面构建一个SpringBootWeb应用。1.创建SpringBootWeb应用创建基于Lombok依赖的SpringBootWeb应用ch10。2.修改pom.xml文件在pom.xml文件中添加MySQL连接器与MyBatis-Plus依赖。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
3.设置Web应用ch10的上下文路径及数据源配置信息server.servlet.context-path=/ch10#数据库地址spring.datasource.url=jdbc:mysql://localhost:3306/springtest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8#数据库用户名spring.datasource.username=root#数据库密码spring.datasource.password=root#数据库驱动spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#设置包别名(在Mapper映射文件中直接使用实体类名)mybatis-plus.type-aliases-package=com.ch10.entity#在控制台输出SQL语句日志.ch10.mapper=debug#让控制器输出的JSON字符串格式更美观spring.jackson.serialization.indent-output=true《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.创建实体类创建名为com.ch10.entity的包,并在该包中创建MyUser实体类。该实体类与【例7-5】中的相同,不再赘述。5.创建数据访问接口创建名为com.ch10.mapper的包,并在该包中创建UserMapper接口。UserMapper接口通过继承BaseMapper<MyUser>接口,对实体类MyUser对应的数据表user进行CRUD操作。UserMapper接口的代码与【例7-5】中的相同,不再赘述。6.创建Service接口及实现类创建名为com.ch10.service的包,并在该包中创建UserService接口及实现类UserServiceImpl。UserService接口及实现类UserServiceImpl的代码与【例7-5】中的相同,不再赘述。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
7.创建控制器类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从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.在应用程序的主类中扫描Mapper接口@SpringBootApplication@MapperScan(basePackages={"com.ch10.mapper"})publicclassCh10Application{publicstaticvoidmain(String[]args){SpringApplication.run(Ch191Application.class,args);}}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.2.2测试Mapper接口在IntelliJIDEA中,选中类或接口的名字,按下快捷键Ctrl+Shift+T创建测试类,此时生成的测试类在test文件夹里面,测试方法都是void方法。如图10.1所示的CreateTest窗口。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.2.2测试Mapper接口@SpringBootTest用于SpringBoot应用测试,它默认根据包名逐级往上找,一直找到SpringBoot主程序(包含@SpringBootApplication注解的类),并在单元测试时启动该主程序来创建Spring上下文环境。所以,需要在单元测试类上使用@SpringBootTest注解标注后,才能进行单元测试。在测试类UserMapperTest中,使用Junit5的注解与断言进行Mapper接口方法的测试。@AutowiredprivateUserMapperuserMapper;@TestvoidgetOne(){ MyUsermu=userMapper.selectById(1);
assertEquals(mu.getUid(),1,"a与b不相等");
}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.2.3测试Service层单元测试Service层与测试Mapper接口类似,需要特别考虑Service是否依赖其他还未开发完毕的Service(第三方接口)。如果依赖其他还未开发完毕的Service,我们需要使用Mockito(JavaMock测试框架,用于模拟任何Spring管理的Bean)来模拟未完成的Service。假设,应用ch10的UserServiceImpl类依赖一个还未开发完毕的第三方接口UsexService。接口UsexService中有一个获得用户性别的接口方法getUsex。publicinterfaceUsexService{StringgetUsex(intid);}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.2.3测试Service层创建UserServiceImpl的测试类UserServiceImplTest,在UserServiceImplTest类中,使用Mockito.mock方法模拟第三方接口UsexService的对象,并进行测试。@SpringBootTestclassUserServiceImplTest{@AutowiredprivateUserServiceuserService;//模拟第三方接口UsexService对象privateUsexServiceusexService=Mockito.mock(UsexService.class);@TestvoidtestGetOne(){intuid=1;StringexpectedUsex="女";/*given是BDDMockito的一个静态方法,用来模拟一个Service方法调用返回,anyInt()表示可以传入任何参数,willReturn方法说明这个调用将返回女。*/
BDDMockito.given(usexService.getUsex(anyInt())).willReturn(expectedUsex);
assertEquals(expectedUsex,userService.getById(uid).getUsex(),"测试失败,与期望值不一致");}}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录10.1Junit510.2单元测试用例10.3使用Postman测试Controller层《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.3使用Postman测试Controller层Postman是一个接口测试工具,在做接口测试时,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果,从而验证响应中的结果数据是否和预期值相匹配。Postman主要是用来模拟各种HTTP请求的(如:get/post/delete/put..等等),Postman与浏览器的区别在于有的浏览器不能输出JSON格式,而Postman更直观接口返回的结果。可从官网/下载对应的Postman安装程序。安装成功后,不需要创建账号即可使用。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.测试selectAllUsers方法《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.测试addAUser方法《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
3.测试updateAUser方法《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.测试deleteAUser方法《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
5.测试getOne方法《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
本章小结本章首先重点讲解了Junit5的常用注解与断言;其次,详细讲解了在IntelliJIDEA中如何使用Junit5进行Mapper接口与Service层的单元测试;最后,介绍了一个针对Controller层测试的接口测试工具Postman,此测试工具在前后端分离开发中,广泛应用于RESTful接口测试。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
学习资源推荐第11章电子商务平台的设计与实现(SpringBoot+Thymleaf+MyBatis)学习目的与要求本章通过一个小型的电子商务平台,讲述如何使用SpringBoot+Thymeleaf+MyBatis开发一个Web应用,其中主要涉及的技术包括Spring、SpringMVC、SpringBoot框架技术、MyBatis持久层技术、Thymeleaf表现层技术。通过本章的学习,掌握基于Thymeleaf+MyBatis的SpringBootWeb应用开发的流程、方法以及技术。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录11.1系统设计11.2数据库设计11.3系统管理11.4组件设计11.5后台管理子系统的实现11.6前台电子商务子系统的实现《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.1系统设计电子商务平台分为两个子系统,一是后台管理子系统,一是电子商务子系统。下面分别说明这两个子系统的功能需求与模块划分。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.后台管理子系统后台管理子系统要求管理员登录成功后,才能对商品进行管理,包括添加商品、查询商品、修改商品以及删除商品。除商品管理外,管理员还需要对商品类型、注册用户以及用户的订单等进行管理。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.电子商务子系统1)非注册用户非注册用户或未登录用户具有的功能如下:浏览首页、查看商品详情以及搜索商品的功能。2)用户成功登录的用户除具有未登录用户具有的功能外,还具有购买商品、查看购物车、收藏商品、查看订单、查看收藏以及查看用户个人信息的功能。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.1.2系统模块划分《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
后台管理子系统商品管理销量统计用户管理安全退出新增商品删除商品修改商品查询商品查询用户删除用户类型管理新增类型删除类型查询类型月统计类型统计11.1.2系统模块划分《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录11.1系统设计11.2数据库设计11.3系统管理11.4组件设计11.5后台管理子系统的实现11.6前台电子商务子系统的实现《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.2数据库设计系统采用加载纯Java数据库驱动程序的方式连接MySQL8数据库。在MySQL8中创建数据库ch11,并在ch11中创建8张与系统相关的数据表:ausertable、busertable、carttable、focustable、goodstable、goodstype、orderdetail和orderbasetable。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.2.1数据库概念结构设计1.管理员包括管理员ID、用户名和密码。管理员的用户名和密码由数据库管理员预设,不需要注册。2.用户包括用户ID、邮箱和密码。注册用户的邮箱不能相同,用户ID唯一。3.商品类型包括类型ID和类型名称。商品类型由数据库管理员管理,包括新增和删除管理。4.商品包括商品编号、名称、原价、现价、库存、图片以及类型。其中,商品编号唯一,类型与“3.商品类型”关联。5.购物车包括购物车ID、用户ID、商品编号以及购买数量。其中,购物车ID唯一,用户ID与“2.用户”关联,商品编号与“4.商品”关联。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.2.1数据库概念结构设计6.收藏商品包括ID、用户ID、商品编号以及收藏时间。其中,ID唯一,用户ID与“2.用户”关联,商品编号与“4.商品”关联。7.订单基础信息包括订单编号、用户ID、订单金额、订单状态以及下单时间。其中,订单编号唯一,用户ID与“2.用户”关联。8.订单详情包括订单编号、商品编号以及购买数量。其中,订单编号与“7.订单基础信息”关联,商品编号与“4.商品”关联。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.2.1数据库概念结构设计《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.2.2数据逻辑结构设计《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
字
段含义类
型长
度是否为空id管理员ID(PK自增)int0noaname用户名varchar50noapwd密码varchar50no字
段含义类
型长
度是否为空id用户ID(PK自增)int0nobemailE-mailvarchar50nobpwd密码varchar50no字
段含义类
型长
度是否为空idID(PK自增)int0notypename名称varchar50no字
段含义类
型长
度是否为空id编号(PK自增)int0nogname名称varchar50nogoprice原价double0nogrprice现价double0nogstore库存int0nogpicture图片varchar50
isRecommend是否推荐tinyint0noisAdvertisement是否广告tinyint0nogoodstype_id类型(FK)int0no11.2.2数据逻辑结构设计《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
字
段含义类
型长
度是否为空idID(PK自增)int0nobusertable_id用户ID(FK)int0nogoodstable_id商品编号(FK)int0noshoppingnum购买数量int0no字
段含义类
型长度是否为空idID(PK自增)int0nogoodstable_id商品ID(FK)int0nobusertable_id用户ID(FK)int0nofocustime收藏时间datetime0no字
段含义类
型长
度是否为空idID(PK自增)int0nobusertable_id用户ID(FK)int0noamount金额double0nostatus订单状态tinyint0noorderdate下单时间datetime0no字
段含义类
型长
度是否为空idID(PK自增)int0noorderbasetable_id订单编号(FK)int0nogoodstable_id商品编号(FK)int0noshoppingnum购买数量int0no目录11.1系统设计11.2数据库设计11.3系统管理11.4组件设计11.5后台管理子系统的实现11.6前台电子商务子系统的实现《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.3.1添加相关依赖新建一个基于Thymeleaf+MyBatis的SpringBootWeb应用ch11,在ch11应用中开发本系统。除了IntelliJIDEA快速创建基于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文件。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.3.2HTML页面及静态资源管理系统由后台管理和电子商务两个子系统组成,为了方便管理,两个子系统的HTML页面分开存放。在src/main/resources/templates/admin目录下存放与后台管理子系统相关的HTML页面;在src/main/resources/templates/user目录下存放与电子商务子系统相关的HTML页面;在src/main/resources/static目录下存放与整个系统相关的BootStrap及jQuery。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.后台管理子系统管理员在浏览器的地址栏中输入http://localhost:8080/ch11/admin/toLogin访问登录页面,登录成功后,进入后台商品管理主页面(adminGoods.html),adminGoods.html的运行效果如图11.4所示。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.电子商务子系统注册用户或游客在浏览器的地址栏中输入http://localhost:8080/ch11可以访问电子商务子系统的首页(index.html),index.html的运行效果如图11.5所示。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.3.3应用的包结构1.com.ch.ch11包该包中包括应用的主程序类Ch11Application、统一异常处理类GlobalExceptionHandleController以及自定义异常类NoLoginException。2.com.ch.ch11.controller包系统的控制器类都在该包中,后台管理相关的控制器类在admin子包中,电子商务相关的控制器类在before子包中。3.com.ch.ch11.entity包实体类存放在该包中。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.3.3应用的包结构4.com.ch.ch11.repository包该包中存放的Java接口程序是实现数据库的持久化操作。每个接口方法与SQL映射文件中的id相同。后台管理相关的数据库操作在admin子包中,电子商务相关的数据库操作在before子包中。5.com.ch.ch11.service包service包中有两个子包:admin和before,admin子包存放后台管理相关业务层的接口与实现类;before子包存放电子商务相关业务层的接口与实现类。6.com.ch.ch11.util包该包中存放的是系统的工具类。《SpringBoot从入门到实战(第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#告诉系统在哪里去找mapper.xml文件(映射文件)mybatis.mapperLocations=classpath:mappers/*.xml#在控制台输出SQL语句日志.ch.ch11.repository=debug#关闭Thymeleaf模板引擎缓存(使页面热部署),默认是开启的spring.thymeleaf.cache=false#上传文件时,默认单个上传文件大小是1MB,max-file-size设置单个上传文件大小spring.servlet.multipart.max-file-size=50MB#默认总文件大小是10MB,max-request-size设置总上传文件大小spring.servlet.multipart.max-request-size=500MB《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录11.1系统设计11.2数据库设计11.3系统管理11.4组件设计11.5后台管理子系统的实现11.6前台电子商务子系统的实现《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.4组件设计本系统的组件包括管理员登录权限验证控制器、前台用户登录权限验证控制器、验证码、统一异常处理以及工具类。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.4.1管理员登录权限验证从系统分析得知,管理员成功登录后,才能管理商品、商品类型、用户、订单等功能模块。因此,本系统需要对这些功能模块的操作进行管理员登录权限控制。在com.ch.ch11.controller.admin包中创建AdminBaseController控制器类,该类中有一个@ModelAttribute注解的方法isLogin。isLogin方法的功能是判断管理员是否已成功登录。需要进行管理员登录权限控制的控制器类继承AdminBaseController类即可,因为带有@ModelAttribute注解的方法首先被控制器执行。AdminBaseController控制器类的核心代码如下:@ControllerpublicclassAdminBaseController{ @ModelAttributepublicvoidisLogin(HttpSessionsession)throwsNoLoginException{if(session.getAttribute("auser")==null){thrownewNoLoginException("没有登录");}}}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.4.2前台用户登录权限验证从系统分析得知,用户成功登录后,才能购买商品、收藏商品、查看购物车、我的订单以及个人信息。与管理员登录权限验证同理,在com.ch.ch11.controller.before包中创建BeforeBaseController控制器类,该类中有一个@ModelAttribute注解的方法isLogin。isLogin方法的功能是判断前台用户是否已成功登录。需要进行前台用户登录权限控制的控制器类继承BeforeBaseController类即可。BeforeBaseController控制器类的代码与AdminBaseController基本一样,为节省篇幅,不再赘述。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.4.3验证码本系统验证码的使用步骤如下:1.创建产生验证码的控制器类在com.ch.ch11.controller.before包中,创建产生验证码的控制器类ValidateCodeController,具体代码参见本书提供的源程序ch11。2.使用验证码在需要验证码的HTML页面中,调用产生验证码的控制器显示验证码,示例代码片段如下:<imgth:src="@{/validateCode}"id="mycode">《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.4.4统一异常处理使用注解@ControllerAdvice和@ExceptionHandler创建统一异常处理类GlobalExceptionHandleController。使用注解@ControllerAdvice的类是一个增强的Controller类,在增强的控制器类中使用@ExceptionHandler注解的方法对所有控制器类进行统一处理异常。核心代码如下:@ControllerAdvicepublicclassGlobalExceptionHandleController{ @ExceptionHandler(value=Exception.class) publicStringexceptionHandler(Exceptione,Modelmodel){ Stringmessage=""; //数据库异常
if(einstanceofSQLException){ message="数据库异常"; }elseif(einstanceofNoLoginException){ message="未登录异常"; }else{//未知异常
message="未知异常"; } model.addAttribute("mymessage",message); return"myError"; }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.4.5工具类本系统使用的工具类有两个:MD5Util和MyUtil。MD5Util工具用来对明文密码加密,MyUtil工具里包含文件重命名和获得用户信息两个功能。MD5Util和MyUtil的代码参见本书提供的源程序ch11。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录11.1系统设计11.2数据库设计11.3系统管理11.4组件设计11.5后台管理子系统的实现11.6前台电子商务子系统的实现《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.5.1管理员登录《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.5.2类型管理《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.5.3添加商品《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.5.4查询商品《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
11.5.5修
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年死因、慢性病监测工作培训试题(附答案)
- 系统容灾与数据恢复流程
- 2025年储能电池管理系统EMC测试整改方案
- 2025年事业单位招聘考试综合类专业能力测试试卷(文秘类)全球网络安全保障计划
- 2026冷链物流在葡萄干储运环节的应用效果评估报告
- 2026农业行业市场产销平衡价格机制和政策环境分析研究报告
- 2026农业生物育种技术商业化应用障碍研究
- 2026农业现代化趋势与市场发展分析研究
- 2026中国智能仓储机器人系统集成市场格局演变预测
- 2025中暑的试题及答案
- 2026年中职计算机专业教师岗位实操考核试题及答案
- 收费员心理健康培训课件
- 深圳大疆在线测评行测题库
- 2026年江西财经大学MBA教育学院面试题库含答案
- 《高中生科技创新活动与综合素质评价研究》教学研究课题报告
- 组织部采购工作内控制度
- 初中英语听说读写一体化教学模式创新课题报告教学研究课题报告
- 2026年医疗设备维修考试题库及答案
- 2026年烟花爆竹经营单位安全管理人员考试试题及答案
- AI辅助药物警戒:沙盒中的不良反应监测
- 秦岭四宝课件
评论
0/150
提交评论