当前位置: 首页 > news >正文

不满意Oh My Zsh启动卡顿,来试试Starship吧燎

pagehelper整合

引入依赖

com.github.pagehelper

pagehelper-spring-boot-starter

2.1.0

compile

编写代码

@GetMapping("/list/{pageNo}")

public PageInfo findAll(@PathVariable int pageNo) {

// 设置当前页码和每页显示的条数

PageHelper.startPage(pageNo, 10);

// 查询数据

List allVip = vipService.findAllVip();

// 将数据封装到pageinfo对象中

PageInfo 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 {

// 响应状态码

private int code;

// 消息描述:成功或失败

private String msg;

// 响应对象:任意类型对象

private T data;

public static R OK(T data) {

return R.builder().code(200).msg("成功").data(data).build();

}

// 成功的方法

public static R OK() {

return R.builder().code(200).msg("成功").build();

}

// 失败的方法

public static R FAIL(int code,String msg) {

return R.builder().code(code).msg(msg).build();

}

public static R FAIL() {

return R.builder().code(400).msg("失败").build();

}

}

controller中使用

@GetMapping("/list/{pageNo}")

public R< PageInfo> findAll(@PathVariable int pageNo) {

// 设置当前页码和每页显示的条数,设置后会自动为查询语句加limit

PageHelper.startPage(pageNo, 10);

// 查询数据

List allVip = vipService.findAllVip();

// 将数据封装到pageinfo对象中

PageInfo 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 {

// 响应状态码

private int code;

// 消息描述:成功或失败

private String msg;

// 响应对象:任意类型对象

private T data;

public static R OK(T data) {

return R.builder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).data(data).build();

}

// 成功的方法

public static R OK() {

return R.builder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).build();

}

// 失败的方法

public static R FAIL(CodeEnum codeEnum) {

return R.builder().code(codeEnum.getCode()).msg(codeEnum.getMsg()).build();

}

public static R FAIL() {

return R.builder().code(CodeEnum.FAIL.getCode()).msg(CodeEnum.FAIL.getMsg()).build();

}

}

事务管理

spring boot自动配置了事务管理器。只需要使用@Transactional注解标注需要事务控制的方法即可。

就这么简单。

怎么打war包

修改pom文件

war

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-tomcat

org.springframework.boot

spring-boot-starter-tomcat

provided

启动类继承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 再引入新依赖

org.springframework.boot

spring-boot-starter-logging

org.springframework.boot

spring-boot-starter-log4j2

粕背偻钠

http://www.jsqmd.com/news/632712/

相关文章:

  • 2026年知名的化工厂酸原料/工业盐酸原料/氢氧化钠酸原料厂家推荐与选择指南 - 行业平台推荐
  • lora-scripts详细使用手册:图文并茂,带你完成LoRA训练全流程
  • 2026年评价高的北京办公室装修设计/北京办公室装修工程高评分公司推荐 - 行业平台推荐
  • 别再踩坑了!SQL Server数据类型那点事儿,看懂这篇少背三个锅型
  • 前端代码质量检查
  • Qwen3-Reranker实战案例:构建带反馈机制的迭代式RAG重排系统
  • 5分钟搞定:DeepSeek-R1-Distill-Qwen-1.5B网页版对话机器人搭建
  • 【实战部署+模型优化】YOLOv8花卉分类检测系统:从数据集构建到Web端应用全流程解析
  • 2026年比较好的卷材珍珠棉/护角珍珠棉/定制珍珠棉厂家最新推荐 - 品牌宣传支持者
  • Qwen Pixel Art新手指南:如何用Gradio界面实时调整prompt并预览变化
  • Pixel Couplet Gen 运维指南:模型服务监控与高可用保障
  • Whisper-large-v3案例展示:真实客服录音转写效果对比
  • 快速上手黑丝空姐-造相Z-Turbo:基于Z-Image-Turbo的Lora模型实战
  • 一键部署语音情感识别AI:Emotion2Vec+ Large镜像开箱即用教程
  • 一键复制TensorFlow-v2.9环境:从官方镜像提取配置,避免安装错误
  • 2026年质量好的漂珠板开料机/数控开料机厂家综合实力参考(2025) - 品牌宣传支持者
  • 政务数据安全实战:让敏感信息在用时脱敏、退场时彻底消失
  • CSS面试题2
  • Ubuntu服务器一键部署Qwen3.5-9B-AWQ-4bit:完整环境配置与性能调优
  • K8s持久化存储深度解析:PV、PVC、StorageClass三剑客的生产实战
  • Obsidian Dataview如何用3个核心策略将Markdown笔记变成智能知识网络?
  • 从《赚钱思维》到《持续成交》:陈卫军构建中国本土营销理论体系
  • 2026年比较好的磨砂玻璃/内置百叶玻璃/玻璃全方位厂家推荐参考 - 行业平台推荐
  • LabVIEW多路PID与循环单路PID区别
  • 网盘直链解析引擎:八大平台真实链接获取与下载效率优化方案
  • Python的__complex__方法支持复数运算扩展与数值类型
  • 终极指南:如何将Switch掌机打造成PC游戏串流神器
  • 世界第一个开源可商用 .NET Office 转 PDF 工具/库 - MiniPdf伦
  • Winhance架构深度解析:构建模块化Windows优化框架的设计与实现
  • 终极免费下载管理器:imFile如何让你的下载体验快10倍