部门查询功能

部门查询功能

2026年5月21日·#后端基础SpringBoot/MyBatis/Java/三层架构/驼峰命名·803 字 4 分钟
浏览量加载中...
AI 摘要

SpringBoot 三层架构实现部门列表查询,含驼峰命名映射与Nginx反向代理联调

部门查询功能#

定义#

部门查询功能用于查询所有部门数据并展示在部门管理页面中。基于 SpringBoot 三层架构(Controller → Service → Mapper)实现,涉及 MyBatis 字段映射、驼峰命名规则、请求方式限定以及前后端联调。

实现思路#

三层架构每一层的职责:

查询部门三层架构

  • Controller 层:接收前端请求,调用 Service 查询部门数据,响应结果
  • Service 层:调用 Mapper 接口方法,查询所有部门数据
  • Mapper 层:执行查询所有部门数据的 SQL 操作

代码实现#

Controller 层#

@RestController
public class DeptController {
@Autowired
private DeptService deptService;
@GetMapping("/depts")
public Result list() {
List<Dept> deptList = deptService.findAll();
return Result.success(deptList);
}
}

限定请求方式有两种方法:

  1. @RequestMapping(value = "/depts", method = RequestMethod.GET) — 通过 method 属性限定
  2. @GetMapping("/depts") — 使用衍生注解(推荐)
请求方式衍生注解
GET@GetMapping
POST@PostMapping
PUT@PutMapping
DELETE@DeleteMapping

Service 层#

// DeptService 接口
public interface DeptService {
public List<Dept> findAll();
}
// DeptServiceImpl 实现
@Service
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptMapper deptMapper;
public List<Dept> findAll() {
return deptMapper.findAll();
}
}

Mapper 层#

@Mapper
public interface DeptMapper {
@Select("select * from dept")
public List<Dept> findAll();
}

数据封装 — 字段映射#

当实体类属性名和数据库表字段名不一致时,MyBatis 不能自动封装。

例如数据库字段 create_timeupdate_time,实体类属性 createTimeupdateTime

三种解决方案:

方案一:手动结果映射(@Results + @Result)#

@Results({
@Result(column = "create_time", property = "createTime"),
@Result(column = "update_time", property = "updateTime")
})
@Select("select id, name, create_time, update_time from dept")
public List<Dept> findAll();

方案二:SQL 起别名#

@Select("select id, name, create_time createTime, update_time updateTime from dept")
public List<Dept> findAll();

方案三:开启驼峰命名(推荐)#

如果字段名与属性名符合驼峰命名规则(abc_xyzabcXyz),MyBatis 可自动映射。

mybatis:
configuration:
map-underscore-to-camel-case: true

前提:实体类属性与数据库字段名严格遵守驼峰命名规则。

前后端联调#

前端工程通过 Nginx 反向代理访问后端 Tomcat 服务器。

Nginx反向代理

请求访问流程:

请求访问流程

Nginx 配置关键指令:

  • location:定义匹配特定 URI 请求的规则
  • ^~ /api/:精确匹配以 /api/ 开头的路径
  • rewrite:重写匹配到的 URI 路径
  • proxy_pass:代理转发,将匹配到的请求转发给后端服务器

使用 Nginx 反向代理的原因:

  1. 安全:后端 Tomcat 集群不直接暴露给前端
  2. 灵活:后端增减服务器对前端无感知,只需修改 Nginx 配置
  3. 负载均衡:可方便实现后端 Tomcat 的负载均衡

常见场景#

  • 列表页数据加载,一次性查询全部记录并展示
  • 前后端分离项目中,通过 Nginx 代理解决跨域和负载均衡
  • 数据库下划线字段与 Java 驼峰属性之间的自动映射

注意事项#

  • 推荐使用 @GetMapping 等衍生注解限定请求方式,简洁优雅
  • 驼峰命名映射是最推荐的字段映射方案,但前提是命名严格遵循规范
  • @Results 手动映射仅在字段名无法自动映射时使用
  • Nginx 的反向代理使前后端解耦,前端始终请求同一地址

相关链接#

最后更新于 2026-05-21,距今已过 88 天

部分内容可能已过时

评论区

[ 标签 ]
# AI5# AI 编程2# AI工具1# Ajax2# Apifox1# AstrBot2# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# CloudFlare2# Cloudflare1# CloudFlare-ImgBed1# coc3# CSS6# DeepSeek2# deepseek2# DELETE1# Docker1# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML6# HTTP2# Java23# java13# JavaScript5# JDBC3# JSON1# JUnit1# Logback1# Maven6# Mybatis1# MyBatis4# MySQL6# MySql1# NapCat1# Obsidian3# OpenCode3# ORM1# PathVariable1# PicGo1# py2# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot11# SQL2# Svelte2# TailwindCSS1# Telegram2# Tlias2# Vercel1# Vue7# Waline3# WebDAV1# Web基础6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档9# 写作1# 刷步数1# 前端32# 动态1# 动漫1# 单词2# 博客6# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 图床4# 地图1# 备份1# 奇思妙想1# 存储1# 学习方法1# 宝塔面板3# 宝宝9# 导航栏1# 工具2# 开发1# 开发规范1# 开心1# 影视1# 微信1# 性能优化2# 总结1# 想法7# 感悟9# 指南1# 插件3# 故障排除1# 效率工具2# 教程7# 数据库10# 斩神1# 日常60# 日志框架1# 朋友圈1# 朱元璋1# 模板1# 测试1# 游戏1# 生活迁移1# 电影2# 碎碎念1# 视觉识别1# 网络教室1# 羊毛1# 脚本1# 脚本工具1# 自动化2# 蓝奏云1# 订阅推荐1# 记录1# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载1# 运动1# 部落冲突1# 配置1# 随机图1# 音乐3# 音标1# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]
工具