mid - SpringBoot配置 & 分页 & MVC · SpringBoot3
SpringBoot 属性 & 多环境 & 部署
jar包运行属性配置
--键=值—>--server.port=10010
代码块收起展开
C:\Users\Administrator\Desktop\big-event\target>
java -jar big-event-1.0-SNAPSHOT. jar --server.port=9999代码块收起展开
public class Solution{
// --参数会传给主函数作为形参
public static void main(String[] args){
}
}属性配置方式
按系统优先级从低到高
- 项目中resources目录下的application.yml
- jar包所在目录下的application.yml
- 操作系统环境变量
- 命令行参数
环境部署
让java类变成jar包
依赖引入jar包插件
代码块收起展开
<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可以用来隔离应用程序配置的各个部分, 并在特定环境下指定部分配置生效
代码块收起展开
+ 如何分割不同环境配置?
---
+ 如何指定哪些配置属于哪个环境?
spring:
config:
activate:
on-profile: 环境名称
+ 如何指定哪个环境配置生效?
spring:
profiles:
activate:环境名称文件配置
单文件配置
---来分割不同环境配置spring.config.activate.on-profile配置所属环境spring.profiles.active激活环境
多文件配置
- 通过多个文件分别配置不同环境的属性
- 文件命名格式:
application-envirName.yml - 在application.yml中激活环境
#### 分组问题
- 按照配置的类别,把配置信息配置到不同的配置文件中
application-分类名.yml
- 在application.yml中定义分组
spring.profiles.group
- 在application.yml中激活分组
spring.profiles.active
数据分页 PageHelper
PageHelper 是 MyBatis 生态里一个很常用的 分页插件。 它的作用很直接: 自动改造成分页查询。
代码块收起展开
**PageHelper 负责分页
代码块收起展开
Page / PageInfo 负责拿分页结果 代码块收起展开
PageBean 负责统一接口返回结构**原理
代码块收起展开
你调用 startPage(pageNum, pageSize)
↓
PageHelper 把分页参数放到当前线程上下文里
↓
执行 mapper 查询
↓
分页拦截器拦截这条 SQL
↓
自动拼接 limit
↓
再查 total 总记录数
↓
返回 Page 对象比如你原本查文章列表:
代码块收起展开
select * from article用了 PageHelper 之后,它会帮你在 SQL 层面加上分页逻辑,类似:
代码块收起展开
select * from article limit ?, ?并且还会额外帮你查:
代码块收起展开
select count(*)所以它不是 Java 代码里手动截 List。
它是拦截 SQL,然后改写 SQL。
使用
引入依赖不必说:
1. 查询前开启分页
代码块收起展开
PageHelper.startPage(pageNum, pageSize);2. 调用mapper拿数据
代码块收起展开
List<Article> list =
articleMapper.list(userId, categoryId, state);3. 取出分页结果
代码块收起展开
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要自己编写, 如果前端只要
实例
代码块收起展开
@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;
}代码块收起展开
PageHelper
↓
开启分页
mapper 查询
↓
返回 Page / List
Page / PageInfo
↓
拿到 total、list 等分页信息
PageBean
↓
你自己再封装成项目统一返回格式动态SQL
MyBatisAPI
SpringMVC
Spring框架的子系统
Model(模型)-View(视图)-Controller(控制器)

Spring MVC 的整体架构,本质上是一个以 DispatcherServlet 为核心的前端控制器架构。
在这套架构中:
- 请求
- DispatcherServlet 负责统一接收请求与调度流程
- HandlerMapping 负责根据请求查找目标处理器
- HandlerAdapter 负责适配并执行处理器方法
- Controller 负责执行业务逻辑并返回结果
- ViewResolver 负责解析视图
- HttpMessageConverter 负责把 Java 对象转换为响应数据
这套设计把“请求分发、方法执行、结果处理”彻底解耦,使 Controller 只专注于业务本身,同时也让 Spring MVC 具备很强的扩展能力。
1. 统一入口层
DispatcherServlet
它是 Spring MVC 的前端控制器。
所有请求先到它这里,不直接找 Controller。
它干的不是业务,而是统一调度:
- 接收请求
- 找谁处理
- 调谁执行
- 拿结果
- 决定怎么响应
这玩意为什么叫前端控制器
因为它站在整个 Web MVC 最前面,像总调度台一样控制后续流程。
2. 处理器定位层
HandlerMapping 它负责根据请求路径、请求方式等信息,找到对应的处理器,也就是目标 Controller 方法。
比如:
/user/loginGET /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 响应体 的问题。