1.SSMSSM,即Spring、SpringMVC、MyBatis。1.1SpringSpring框架具有IOC/DI和AOP的特点。1.1.1IOC/DIIOC(InversionOfControl)和DI(DependencyInjection)指的是同一个特性。Spring支持使用BeanFactory以Bean的形式获取对象,比如将Mapper层类的实例注入到Service层类的实例中,再将Service层类的实例注入到Controller层类的实例中。@ServicepublicclassAccountServiceImplimplementsAccountService{@AutowiredprivateAccountMapperaccountMapper;@OverridepublicintdeleteByPrimaryKey(Longid){returnaccountMapper.deleteByPrimaryKey(id);}@Overridepublicintinsert(Accountrecord){returnaccountMapper.insert(record);}@OverridepublicintinsertSelective(账户记录){返回0;}@OverridepublicAccountselectByPrimaryKey(Longid){returnaccountMapper.selectByPrimaryKey(id);}@OverridepublicAccountlogin(StringaccountName,StringaccountPwd){returnaccountMapper.login(accountName,accountPwd);}@OverridepublicListqueryAll(){returnaccountMapper.queryAll();}@OverridepublicintupdateByPrimaryKeySelective(账户记录){返回0;}@OverridepublicintupdateByPrimaryKey(账户记录){返回账户tMapper.updateByPrimaryKey(记录);}}@RestController@RequestMapping("account")publicclassAccountController{@AutowiredprivateAccountServiceaccountService;@GetMapping(value="loginDo")@ResponseBodypublicResultlogin(StringaccountName,StringaccountPwd,HttpSessionsession){Accountaccount=accountService.login(accountName,accountPwd);}if(account!=null){session.setAttribute("account",account);返回结果.ok();}else{returnResult.error("用户名或密码错误");}}@GetMapping(value="queryAll")@ResponseBodypublicResultqueryAll(){Listlist=accountService.queryAll();returnResult.ok().data("列表",列表);}@GetMapping(value="queryById")@ResponseBodypublicResultqueryById(Longid){账户账户=accountService.selectBy主键(id);returnResult.ok().data("账户",账户);}@PostMapping(value="/addDo")@ResponseBodypublicObjectadd(Accountaccount){intresult=accountService.insert(account);HashMapmap=newHashMap<>();map.put(“代码”,结果>0?200:500);返回地图;}@GetMapping(value="delete")@ResponseBodypublicObjectdelete(Longid){intresult=accountService.deleteByPrimaryKey(id);HashMapmap=newHashMap<>();map.put(“代码”,结果>0?200:500);返回地图;}@PostMapping(value="update")@ResponseBodypublicvoidupdate(Accountaccount){intresult=accountService.updateByPrimaryKey(account);HashMapmap=newHashMap<>();map.put("代码",结果>0?200:500);}}IOC/DI增强了项目代码的可维护性和扩展性作为切面类,可以将需要功能的类与切面类的通知(函数)结合使用。例如:@Aspect//表示是切面类@ComponentpublicclassLogAspect{Loggerlog=Logger.getLogger(LogAspect.class);//进入方法时间戳privateLongstartTime;//方法结束时间戳(计时)privateLongendTime;/***定义切入点表达式*访问修饰符返回值包名。包裹名字。包名...类名。方法名(参数列表)*权限修饰符可以使用默认的第一个*表示返回值Type..表示当前包及其子包。第二个*表示任何方法(..)表示任何参数列表*/privatefinalStringPOINTCUT="execution(*com.woniuxy.ssm.service.*.*(..))";publicLogAspect(){}//预通知,方法前执行@Before(POINTCUT)publicvoiddoBefore(JoinPointjoinPoint){startTime=System.currentTimeMillis();log.info("请求开始时间:"+LocalDateTime.now());log.info("请求参数:"+Arrays.toString(joinPoint.getArgs()));}//通知后@After(POINTCUT)publicvoiddoAfter(JoinPointjoinPoint){log.info("Logger-->后通知,方法名:"+joinPoint.getSignature().getName()+",方法执行完全的”);}//返回通知正常结束时进入该方法@AfterReturning(retturning="ret",pointcut=POINTCUT)publicvoiddoAfterReturning(Objectret){endTime=System.currentTimeMillis();log.info("请求结束时间:"+LocalDateTime.now());log.info("请求耗时:"+(endTime-startTime));//处理请求后,返回内容log.info("Requestreturn:"+ret);}//异常通知:1.目标方法异常结束时发生异常或者抛出异常时执行@AfterThrowing(pointcut=POINTCUT,throwing="throwable")publicvoiddoAfterThrowing(Throwablethrowable){//保存异常日志记录log.error("异常时间:"+LocalDateTime.now());log.error("抛出异常:"+throwable.getMessage());}//通知周围必须有返回值,否则程序无法继续执行,会返回空指针异常@Around(value=POINTCUT)publicObjectdoAround(ProceedingJoinPointjp)throwsThrowable{log.info(“权限管理”);//执行目标方法proceedObjectproceed=jp.proceed();log.info("日志记录");返回进行;}}AOP让代理更简洁易用1.2SpringMVCSpringMVC是Spring框架的一部分,用于简化Controller层对接收到的数据的预处理(切分、类型转换、封装成对象),使Controller层的代码更加精简。Controller层的一个方法示例:@AutowiredprivateUserServiceuserService;@RequestMapping("/login")//参数名称要与客户端请求参数名称一致//使用ServletAPI相关方法:在方法中添加相应类型的参数publicStringlogin(Stringtelephone,Stringpassword,HttpSessionsession){Useruser=userService.getUserByNameAndPwd(telephone,password);if(user!=null){session.setAttribute("login_user",user);//使用session传值return"redirect:main";}else{返回“重定向:登录”;}}1.3MyBatisMyBatis是一个持久层框架。MyBatis支持自动生成实体层和接口的实体类,xml和mapper层类的实现,也支持自定义SQL。MyBatis大大减少了实体层和映射层的代码,帮助开发者将更多的精力投入到服务层和控制器层。2、SpringBoot结合SSM构建项目时,需要导入很多依赖,进行相关配置。如果不小心导入了依赖或者配置文件中缺少某一项,都会影响应用的正常运行。SpringBoot可以简化很多依赖的导入工作(将很多依赖打包成一个starter,只需要导入starter),相关的配置工作(自动执行相应的配置,不需要手动配置),使得项目的构建速度更快,开发者可以把更多的精力花在构建服务层和控制器层上。org.springframework.bootspring-boot-starter-weborg.projectlomboklomboktrueorg.springframework.bootspring-boot-starter-test<范围>测试org.springframework.bootspring-boot-devtoolstrue<依赖关系>org.springframework.bootspring-boot-configuration-processor<可选>true可选>org.mybatis.spring.bootmybatis-spring-boot-starter2.2.2mysqlmysql-connector-java运行时com.alibabadruid1.2.7org.springframework.bootspring-boot-starter-thymeleaf