agehelper整合引入依赖dependency groupIdcom.github.pagehelper/groupId artifactIdpagehelper-spring-boot-starter/artifactId version2.1.0/version scopecompile/scope /dependency编写代码GetMapping(/list/{pageNo}) public PageInfoVip findAll(PathVariable int pageNo) { // 设置当前页码和每页显示的条数 PageHelper.startPage(pageNo, 10); // 查询数据 ListVip allVip vipService.findAllVip(); // 将数据封装到pageinfo对象中 PageInfoVip pageInfo new PageInfo(allVip); return pageInfo; }web层响应结果的封装对于前后端分离的系统来说后端会返回json数据一般会封装一个R对象来解决统一响应格式问题。package com.ali.springboot3ssm.result; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; Data NoArgsConstructor AllArgsConstructor Builder // 建造模式 public class RT { // 响应状态码 private int code; // 消息描述成功或失败 private String msg; // 响应对象任意类型对象 private T data; public static T RT OK(T data) { return R.Tbuilder().code(200).msg(成功).data(data).build(); } // 成功的方法 public static T RT OK() { return R.Tbuilder().code(200).msg(成功).build(); } // 失败的方法 public static T RT FAIL(int code,String msg) { return R.Tbuilder().code(code).msg(msg).build(); } public static T RT FAIL() { return R.Tbuilder().code(400).msg(失败).build(); } }controller中使用GetMapping(/list/{pageNo}) public R PageInfoVip findAll(PathVariable int pageNo) { // 设置当前页码和每页显示的条数,设置后会自动为查询语句加limit PageHelper.startPage(pageNo, 10); // 查询数据 ListVip allVip vipService.findAllVip(); // 将数据封装到pageinfo对象中 PageInfoVip pageInfo new PageInfo(allVip); return R.OK(pageInfo); }改进R对象添加一个枚举类型package com.ali.springboot3ssm.enums; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; NoArgsConstructor AllArgsConstructor public enum CodeEnum { // 枚举的大括号一开始的位置必须有枚举值 // 枚举值下面如果没有代码枚举值列表最后的“”可以省略 // 枚举值下面如果有代码枚举值列表最后的“” 不可以省略 OK(200, OK), FAIL(400, 失败), BAD_REQUEST(400, 失败), NOT_FOUND(400, 失败), INTERNAL_ERROR(400, 失败), MODIFICATION_ERROR(400, 失败), DELETION_ERROR(400, 失败), CREATE_ERROR(400, 失败); Getter Setter private int code; Getter Setter private String msg; }重写R类Data NoArgsConstructor AllArgsConstructor Builder // 建造模式 public class RT { // 响应状态码 private int code; // 消息描述成功或失败 private String msg; // 响应对象任意类型对象 private T data; public static T RT OK(T data) { return R.Tbuilder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).data(data).build(); } // 成功的方法 public static T RT OK() { return R.Tbuilder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).build(); } // 失败的方法 public static T RT FAIL(CodeEnum codeEnum) { return R.Tbuilder().code(codeEnum.getCode()).msg(codeEnum.getMsg()).build(); } public static T RT FAIL() { return R.Tbuilder().code(CodeEnum.FAIL.getCode()).msg(CodeEnum.FAIL.getMsg()).build(); } }事务管理spring boot自动配置了事务管理器。只需要使用Transactional注解标注需要事务控制的方法即可。就这么简单。怎么打war包修改pom文件!-- 打包方式修改为war-- packagingwar/packaging !-- 排除tomcat-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId exclusions exclusion groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-tomcat/artifactId /exclusion /exclusions /dependency !-- 添加tomcat依赖-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-tomcat/artifactId !-- provided:表示这个依赖不会被打到war包中只是编译时使用-- scopeprovided/scope /dependency启动类继承SpringBootServletInitializer类并重写configure方法MapperScan(basePackages com.ali.springboot3ssm.repository) SpringBootApplication public class Springboot3SsmApplication extends SpringBootServletInitializer { Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Springboot3SsmApplication.class); } public static void main(String[] args) { SpringApplication.run(Springboot3SsmApplication.class, args); } }日志处理抽象的日志框架什么时抽象的日志框架编译阶段可以使用抽象的日志框架能正常编译。但运行阶段必须提供具体的日志框架目的是具体的日志框架可灵活切换。抽象框架有SLF4J 、 Commons Logging。这2个都可以绑定具体的日志框架如Log4j、Log4j2、Logback、JUL具体的日志框架Log4j已过时、Log4j2推荐、Logback推荐、JULJava util Logging功能有限适合小型应用spring boot默认集成log back日志级别日志级别由低到高trace级别最低。记录最详细信息通常在调试时使用debug记录程序运行时的详细信息比如变量的值进入或退出某个方法等主要用于开发时调试info记录一般信息如系统启动、服务初始化完成等表示程序运行正常。warn警告信息error错误信息生成环境中 通常把日志级别设为info或更高级别开发或测试环境中设为debug或tracespring boot默认日志级别是infoSlf4j // 这是lombok的一个注解作用是为我们维护一个日志对象log SpringBootApplication public class Springboot3SsmApplication { public static void main(String[] args) { SpringApplication.run(Springboot3SsmApplication.class, args); // 直接使用log log.info(日志信息); } }调整日志级别# 调整日志级别 logging.level.rootdebug日志的粗细粒度# 调整根日志级别全局的整个项目都是这个级别 logging.level.rootdebug # 为特定包设置日志级别 logging.level.com.ali.springboot3ssm.controllerdebug # 为特定类设置日志级别 logging.level.com.ali.springboot3ssm.service.UserServicetrace # 在控制台中打印sql (这个包是Mapper类所在的包) logging.level.com.ali.springboot3ssm.repositorydebug日志输出到文件有2种方式这2种方式不能共存如果同时存在只有logging.file.name生效# 将日志文件输出到当前项目根目录下的log目录中。文件名默认spring.log 并且文件名不可修改 # 路径可随便改。可以是硬盘上的任意有权限路径 logging.file.path./log/ # 日志文件输出到当前项目根目录下my.log文件。路径不可修改 logging.file.namemy.log滚动日志防止日志无线增长将日志文件分割成多个文件避免单个文件过大难以处理# 此策略仅适合logback # 日志文件达到多大时进行归档,打成一个压缩包 logging.logback.rollingpolicy.max-file-size10MB # 归档日志文件总共达到多大时删除 logging.logback.rollingpolicy.total-size-cap50GB # 归档日志文件最多保留几天 logging.logback.rollingpolicy.max-history60 #启动项目时是否清理归档日志文件 logging.logback.rollingpolicy.clean-history-on-startfalse # 归档日志文件名格式 logging.logback.rollingpolicy.file-name-pattern${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz日志框架切换先排除log back 再引入新依赖!-- 排除默认日志依赖-- exclusion groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-logging/artifactId /exclusion /exclusions /dependency !-- 引入log4j依赖-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-log4j2/artifactId /dependency