pagehelper整合
引入依赖
- <dependency>
- <groupId>com.github.pagehelper</groupId>
- pagehelper-spring-boot-starter</artifactId>
- <version>2.1.0</version>
- <scope>compile</scope>
- </dependency>
复制代码 编写代码
- @GetMapping("/list/{pageNo}")
- public PageInfo<Vip> findAll(@PathVariable int pageNo) {
- // 设置当前页码和每页显示的条数
- PageHelper.startPage(pageNo, 10);
- // 查询数据
- List<Vip> allVip = vipService.findAllVip();
- // 将数据封装到pageinfo对象中
- PageInfo<Vip> 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 R<T> {
- // 响应状态码
- private int code;
- // 消息描述:成功或失败
- private String msg;
- // 响应对象:任意类型对象
- private T data;
- public static <T> R<T> OK(T data) {
- return R.<T>builder().code(200).msg("成功").data(data).build();
- }
- // 成功的方法
- public static <T> R<T> OK() {
- return R.<T>builder().code(200).msg("成功").build();
- }
- // 失败的方法
- public static <T> R<T> FAIL(int code,String msg) {
- return R.<T>builder().code(code).msg(msg).build();
- }
- public static <T> R<T> FAIL() {
- return R.<T>builder().code(400).msg("失败").build();
- }
- }
复制代码 controller中使用- @GetMapping("/list/{pageNo}")
- public R< PageInfo<Vip>> findAll(@PathVariable int pageNo) {
- // 设置当前页码和每页显示的条数,设置后会自动为查询语句加limit
- PageHelper.startPage(pageNo, 10);
- // 查询数据
- List<Vip> allVip = vipService.findAllVip();
- // 将数据封装到pageinfo对象中
- PageInfo<Vip> 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 R<T> {
- // 响应状态码
- private int code;
- // 消息描述:成功或失败
- private String msg;
- // 响应对象:任意类型对象
- private T data;
- public static <T> R<T> OK(T data) {
- return R.<T>builder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).data(data).build();
- }
- // 成功的方法
- public static <T> R<T> OK() {
- return R.<T>builder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).build();
- }
- // 失败的方法
- public static <T> R<T> FAIL(CodeEnum codeEnum) {
- return R.<T>builder().code(codeEnum.getCode()).msg(codeEnum.getMsg()).build();
- }
- public static <T> R<T> FAIL() {
- return R.<T>builder().code(CodeEnum.FAIL.getCode()).msg(CodeEnum.FAIL.getMsg()).build();
- }
- }
复制代码 事务管理
spring boot自动配置了事务管理器。只需要使用@Transactional注解标注需要事务控制的方法即可。
就这么简单。
怎么打war包
修改pom文件- <packaging>war</packaging>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- spring-boot-starter-web</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.springframework.boot</groupId>
- spring-boot-starter-tomcat</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- spring-boot-starter-tomcat</artifactId>
- <scope>provided</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(推荐)、JUL(Java util Logging,功能有限,适合小型应用)
spring boot默认集成log back
日志级别
日志级别由低到高:
- trace:级别最低。记录最详细信息,通常在调试时使用
- debug:记录程序运行时的详细信息,比如变量的值,进入或退出某个方法等,主要用于开发时调试
- info:记录一般信息,如系统启动、服务初始化完成等,表示程序运行正常。
- warn:警告信息
- error:错误信息
生成环境中 通常把日志级别设为info或更高级别
开发或测试环境中,设为debug或trace
spring boot默认日志级别是info- @Slf4j // 这是lombok的一个注解,作用是为我们维护一个日志对象log
- @SpringBootApplication
- public class Springboot3SsmApplication {
- public static void main(String[] args) {
- SpringApplication.run(Springboot3SsmApplication.class, args);
- // 直接使用log
- log.info("日志信息");
- }
- }
复制代码 调整日志级别
- # 调整日志级别
- logging.level.root=debug
复制代码 日志的粗细粒度
- # 调整根日志级别(全局的,整个项目都是这个级别)
- logging.level.root=debug
- # 为特定包设置日志级别
- logging.level.com.ali.springboot3ssm.controller=debug
- # 为特定类设置日志级别
- logging.level.com.ali.springboot3ssm.service.UserService=trace
- # 在控制台中打印sql (这个包是Mapper类所在的包)
- logging.level.com.ali.springboot3ssm.repository=debug
复制代码 日志输出到文件
有2种方式,这2种方式不能共存,如果同时存在,只有logging.file.name生效- # 将日志文件输出到当前项目根目录下的log目录中。文件名默认spring.log 并且文件名不可修改
- # 路径可随便改。可以是硬盘上的任意有权限路径
- logging.file.path=./log/
- # 日志文件输出到当前项目根目录下my.log文件。路径不可修改
- logging.file.name=my.log
复制代码 滚动日志
防止日志无线增长,将日志文件分割成多个文件,避免单个文件过大难以处理- # 此策略仅适合logback
- # 日志文件达到多大时进行归档,打成一个压缩包
- logging.logback.rollingpolicy.max-file-size=10MB
- # 归档日志文件总共达到多大时删除
- logging.logback.rollingpolicy.total-size-cap=50GB
- # 归档日志文件最多保留几天
- logging.logback.rollingpolicy.max-history=60
- #启动项目时是否清理归档日志文件
- logging.logback.rollingpolicy.clean-history-on-start=false
- # 归档日志文件名格式
- logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
复制代码 日志框架切换
先排除log back 再引入新依赖- <exclusion>
- <groupId>org.springframework.boot</groupId>
- spring-boot-starter-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- spring-boot-starter-log4j2</artifactId>
- </dependency>
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |