mid - SpringBoot配置 & 分页 & MVC · SpringBoot3

SpringBoot 属性 & 多环境 & 部署

jar包运行属性配置

  • --键=值 —> --server.port=10010
代码块POWERSHELL · 2 行收起展开
C:\Users\Administrator\Desktop\big-event\target>
java -jar big-event-1.0-SNAPSHOT. jar --server.port=9999
代码块JAVA · 5 行收起展开
public class Solution{
	// --参数会传给主函数作为形参
	public static void main(String[] args){
	}
}

属性配置方式

按系统优先级从低到高

  • 项目中resources目录下的application.yml
  • jar包所在目录下的application.yml
  • 操作系统环境变量
  • 命令行参数

环境部署

让java类变成jar包

依赖引入jar包插件

代码块XML · 4 行收起展开
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId><version>3.1.3</version>
</pluqin>

Q&A

  • jar包生成: 执行package命令即可
  • jar包运行: java -jar jarPos
  • jar包部署: 必须有 jre 环境

多环境开发

Profiles

Springboot提供的Profiles可以用来隔离应用程序配置的各个部分, 并在特定环境下指定部分配置生效

代码块PLAINTEXT · 13 行收起展开
+ 如何分割不同环境配置?
	 ---
	 
+ 如何指定哪些配置属于哪个环境?
  spring:
	  config:
		  activate:
			  on-profile: 环境名称
			  
+ 如何指定哪个环境配置生效?
  spring:
	  profiles:
		  activate:环境名称

文件配置

单文件配置

  • --- 来分割不同环境配置
  • spring.config.activate.on-profile配置所属环境
  • spring.profiles.active激活环境

多文件配置

  • 通过多个文件分别配置不同环境的属性
  • 文件命名格式: application-envirName.yml
  • 在application.yml中激活环境
Pasted image 20260402205916 #### 分组问题 - 按照配置的类别,把配置信息配置到不同的配置文件中 application-分类名.yml - 在application.yml中定义分组 spring.profiles.group - 在application.yml中激活分组 spring.profiles.active

数据分页 PageHelper

PageHelper 是 MyBatis 生态里一个很常用的 分页插件。 它的作用很直接: 自动改造成分页查询。

代码块PLAINTEXT · 1 行收起展开
**PageHelper 负责分页  
代码块PLAINTEXT · 1 行收起展开
Page / PageInfo 负责拿分页结果  
代码块PLAINTEXT · 1 行收起展开
PageBean 负责统一接口返回结构**

原理

代码块MARKDOWN · 13 行收起展开
你调用 startPage(pageNum, pageSize)

PageHelper 把分页参数放到当前线程上下文里

执行 mapper 查询

分页拦截器拦截这条 SQL

自动拼接 limit

再查 total 总记录数

返回 Page 对象

比如你原本查文章列表:

代码块SQL · 1 行收起展开
select * from article

用了 PageHelper 之后,它会帮你在 SQL 层面加上分页逻辑,类似:

代码块SQL · 1 行收起展开
select * from article limit ?, ?

并且还会额外帮你查:

代码块SQL · 1 行收起展开
select count(*)

所以它不是 Java 代码里手动截 List。
它是拦截 SQL,然后改写 SQL

使用

引入依赖不必说: pagehelper-spring-boot-starter

1. 查询前开启分页

代码块JAVA · 1 行收起展开
PageHelper.startPage(pageNum, pageSize);

2. 调用mapper拿数据

代码块JAVA · 2 行收起展开
List<Article> list = 
articleMapper.list(userId, categoryId, state);

3. 取出分页结果

代码块JAVA · 9 行收起展开
Page<Article> page = (Page<Article>) list;

long total = page.getTotal();
List<Article> items = page.getResult();

//封装返回
PageBean<Article> pb = new PageBean<>();
	pb.setTotal(total);
	pb.setItems(items);

注意这里的pageBean要自己编写, 如果前端只要

实例

代码块JAVA · 24 行收起展开
@Override
public PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state) {
    // 1. 创建 PageBean 对象
    PageBean<Article> pb = new PageBean<>();

    // 2. 开启分页
    PageHelper.startPage(pageNum, pageSize);

    // 3. 获取当前登录用户 id
    Map<String, Object> map = ThreadLocalUtil.get();
    Integer userId = (Integer) map.get("id");

    // 4. 查询文章列表
    List<Article> as = articleMapper.list(userId, categoryId, state);

    // 5. PageHelper 查询后的结果,底层会返回 Page
    Page<Article> p = (Page<Article>) as;

    // 6. 把数据封装到 PageBean
    pb.setTotal(p.getTotal());
    pb.setItems(p.getResult());

    return pb;
}
代码块PLAINTEXT · 15 行收起展开
			PageHelper

			开启分页
			
			mapper 查询

			返回 Page / List
			
			Page / PageInfo

			拿到 total、list 等分页信息
			
			PageBean

			你自己再封装成项目统一返回格式

动态SQL

MyBatisAPI

SpringMVC

Spring框架的子系统 Model(模型)-View(视图)-Controller(控制器) Pasted image 20260403132218

Spring MVC 的整体架构,本质上是一个以 DispatcherServlet 为核心的前端控制器架构。

在这套架构中:

  • 请求
  • DispatcherServlet 负责统一接收请求与调度流程
  • HandlerMapping 负责根据请求查找目标处理器
  • HandlerAdapter 负责适配并执行处理器方法
  • Controller 负责执行业务逻辑并返回结果
  • ViewResolver 负责解析视图
  • HttpMessageConverter 负责把 Java 对象转换为响应数据

这套设计把“请求分发、方法执行、结果处理”彻底解耦,使 Controller 只专注于业务本身,同时也让 Spring MVC 具备很强的扩展能力。

1. 统一入口层

DispatcherServlet 它是 Spring MVC 的前端控制器。
所有请求先到它这里,不直接找 Controller。

它干的不是业务,而是统一调度:

  • 接收请求
  • 找谁处理
  • 调谁执行
  • 拿结果
  • 决定怎么响应

这玩意为什么叫前端控制器
因为它站在整个 Web MVC 最前面,像总调度台一样控制后续流程。


2. 处理器定位层

HandlerMapping 它负责根据请求路径、请求方式等信息,找到对应的处理器,也就是目标 Controller 方法。

比如:

  • /user/login
  • GET /article/list

最终会映射到某个 @RequestMapping / @GetMapping 标注的方法。

你可以写一句:

HandlerMapping 解决的是 请求来了到底该由谁处理 的问题。


3. 处理器适配层

HandlerAdapter

这个名字很多人第一次看会懵。
为什么叫适配器

因为 Spring MVC 面向的是“处理器”这个抽象,不直接写死只能调用某一种 Controller。
不同类型的处理器,调用方式可能不同,所以中间加一个适配器,屏蔽调用差异。

它负责:

  • 参数解析
  • 调用目标方法
  • 处理返回值的初步封装

你可以这样写:

HandlerAdapter 解决的是 找到处理器之后,如何以统一方式执行它 的问题。

这个点很重要,这才是架构味道,不然你就只是在背流程。


4. 业务处理层

Controller

这一层才是真正写业务入口的地方。

它负责:

  • 接收参数
  • 调用 Service
  • 返回结果

但是它本身并不负责:

  • 查找路由
  • 参数底层转换细节
  • 视图解析
  • 响应输出底层过程

这些都被前面的调度层和后面的结果处理层接住了。

所以你可以点一句本质:

Controller 只聚焦业务,而不关心请求调度和响应渲染细节。

这句话很值钱。


5. 结果处理层

这里要分成两种情况写,不然文章会糊。

情况一 返回页面

ViewResolver + View

如果 Controller 返回的是逻辑视图名,比如 login,
那么 Spring MVC 会交给 ViewResolver 解析成真正的视图资源,再渲染页面。

比如:

  • login
  • /templates/login.html
  • /WEB-INF/jsp/login.jsp

你可以写:

ViewResolver 解决的是 逻辑视图名如何转换成真正视图资源 的问题。


情况二 返回数据

HttpMessageConverter

如果 Controller 返回的是对象,并且用了 @ResponseBody 或者是 @RestController,
那就不会走视图解析,而是走 消息转换器

它负责把 Java 对象转成:

  • JSON
  • XML
  • 字符串等响应内容

比如返回一个 User 对象,最后变成 JSON。

你可以写:

HttpMessageConverter 解决的是 Java 对象如何转换成 HTTP 响应体 的问题。