基于Spring Boot与MyBatis-Plus的航空订票系统架构设计与实现
系统架构概述
航空客运订票系统旨在为旅客提供便捷的航班查询、机票预订及订单管理服务,同时为管理员提供后台数据维护功能。本系统采用前后端分离架构,后端基于Spring Boot框架构建RESTful API,结合MyBatis-Plus简化持久层操作,并使用MySQL作为核心关系型数据库,确保系统在高并发场景下的数据一致性与响应速度。
核心技术栈解析
Spring Boot 框架
Spring Boot 是一种用于简化 Spring 应用程序初始搭建与开发过程的框架。它通过"约定优于配置"的核心理念,大幅减少了传统 Spring 项目中繁琐的 XML 配置文件。该框架内置了 Tomcat、Jetty 等 Servlet 容器,使得应用能够以独立 Jar 包的形式直接运行,无需依赖外部 Web 服务器。此外,其提供的 Starter 依赖管理机制和自动装配特性,使得开发者能够以极低的成本集成各类主流中间件与第三方组件,专注于核心业务逻辑的实现。
MySQL 数据库
MySQL 是一款成熟且广泛应用的开源关系型数据库管理系统。在航空订票系统中,其 InnoDB 存储引擎提供了对 ACID 事务的完整支持以及行级锁机制,这对于处理机票库存扣减、订单支付等并发要求极高的业务场景至关重要。MySQL 具备优异的查询优化器和索引机制,能够保障海量航班数据与用户订单数据的高效检索与持久化存储。
系统核心功能展示
以下为系统前端部分核心业务模块的界面展示,包含航班信息检索与用户后台管理视图:
核心业务代码实现
用户服务层实现
在业务逻辑层,通过继承 MyBatis-Plus 的 ServiceImpl 快速获得基础 CRUD 能力,并利用 LambdaQueryWrapper 构建类型安全的条件查询,优化了传统的分页与列表检索逻辑。
package com.flight.booking.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.flight.booking.entity.SysAccount;
import com.flight.booking.mapper.SysAccountMapper;
import com.flight.booking.service.ISysAccountService;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
public class SysAccountServiceImpl extends ServiceImpl<SysAccountMapper, SysAccount> implements ISysAccountService {
@Override
public IPage<SysAccount> fetchPagedAccounts(Map<String, Object> queryParams) {
int currentPage = (int) queryParams.getOrDefault("current", 1);
int pageSize = (int) queryParams.getOrDefault("size", 10);
Page<SysAccount> pageParam = new Page<>(currentPage, pageSize);
LambdaQueryWrapper<SysAccount> queryWrapper = new LambdaQueryWrapper<>();
return this.page(pageParam, queryWrapper);
}
}
Web拦截器与静态资源配置
在 Web 配置层,摒弃了覆盖默认配置的 WebMvcConfigurationSupport,转而实现 WebMvcConfigurer 接口。通过依赖注入的方式配置 JWT 鉴权拦截器,并重新映射静态资源的访问路径,以适配前后端分离部署或特定的前端资源目录结构。
package com.flight.booking.config;
import com.flight.booking.interceptor.JwtAuthInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
private final JwtAuthInterceptor jwtAuthInterceptor;
public WebMvcConfig(JwtAuthInterceptor jwtAuthInterceptor) {
this.jwtAuthInterceptor = jwtAuthInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(jwtAuthInterceptor)
.addPathPatterns("/api/**")
.excludePathPatterns("/api/auth/login", "/api/auth/register");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**")
.addResourceLocations("classpath:/static/assets/")
.addResourceLocations("classpath:/public/uploads/");
}
}
数据库持久层设计
系统采用独立的令牌表来管理用户的登录状态与鉴权信息。通过优化字段命名规范、引入 InnoDB 引擎并添加必要的索引,提升了令牌校验与过期清理的执行效率。
DROP TABLE IF EXISTS `sys_auth_token`;
CREATE TABLE `sys_auth_token` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` bigint(20) NOT NULL COMMENT '关联用户ID',
`user_name` varchar(64) NOT NULL COMMENT '登录账号',
`target_table` varchar(64) DEFAULT NULL COMMENT '关联业务表',
`role_code` varchar(32) DEFAULT NULL COMMENT '角色标识',
`auth_token` varchar(255) NOT NULL COMMENT '鉴权令牌',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`expire_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '失效时间',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_auth_token` (`auth_token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统鉴权令牌表';