1. 项目背景与核心价值对于计算机专业的学生和Java初学者而言毕业设计和实战项目是检验学习成果、积累工程经验的关键环节。然而从零开始构思一个结构完整、技术栈主流、且能跑通的系统常常会遇到“不知道做什么”、“技术选型混乱”、“代码跑不起来”等难题。一个设计良好的实战项目源码不仅能提供完整的学习路径更能作为理解企业级开发流程的绝佳模板。本文将围绕一个基于Spring Boot H5/CSS3的汽车4S店管理系统展开这是一个典型的Java Web企业级应用。它涵盖了从前端页面展示、后端业务逻辑处理到数据库设计的全流程技术栈包含了当前企业开发中主流的Spring Boot、MyBatis-Plus、Thymeleaf、MySQL以及Ajax等。本项目源码结构清晰、功能模块完整非常适合用于学习Spring Boot项目开发、练手巩固Java Web知识、以及作为计算机相关专业的毕业设计。通过拆解这个项目你将能系统地掌握如何构建一个MVC架构的Web应用。2. 系统核心功能与技术栈解析2.1 汽车4S店管理系统核心功能模块一个完整的4S店管理系统其核心是围绕“人、车、服务、财务”四个维度展开。本实战项目通常包含以下功能模块这些模块共同构成了一个可运行的最小闭环业务系统系统管理模块这是所有后台系统的基石。包含用户员工管理、角色管理、权限管理如菜单权限、操作权限确保不同岗位的员工如销售、售后、管理员只能访问和操作其职责范围内的功能。客户信息管理模块记录潜在客户和现有客户的详细信息如姓名、联系方式、购车意向、历史咨询记录等。这是销售跟进和客户关系维护的基础。车辆库存管理模块管理4S店内的新车库存包括车辆的品牌、型号、颜色、配置、VIN码、入库时间、库存状态在库、已预订、已售出等。支持车辆的入库、出库、库存盘点等功能。销售业务模块这是系统的核心业务流。涵盖从客户意向登记、试驾预约、报价单生成、销售合同签订、到车辆交付的全过程管理。关联客户、车辆和销售顾问。售后服务管理模块管理车辆售后的维修保养业务。包括服务预约、工单创建记录故障描述、所需配件、工时、维修进度跟踪、服务结算等。配件管理模块管理维修保养所需的汽车配件库存包括配件的入库、出库、库存预警、供应商信息等。财务统计模块提供简单的数据看板统计每日/每月的销售额、售后服务收入、热门车型销量等为管理决策提供数据支持。2.2 项目技术栈选型与优势为什么选择这个技术组合每一层技术选型都解决了特定问题共同构建了一个高效、易维护的现代Java Web应用。后端框架Spring Boot 2.x核心价值简化Spring应用的初始搭建和开发过程提供了“约定大于配置”的理念。它内嵌了Tomcat服务器使得项目可以打包成一个可独立运行的JAR文件极大地简化了部署。在本项目中的作用快速集成Web MVC、数据访问、事务管理等组件通过spring-boot-starter-*依赖一键引入所需功能让开发者更专注于业务逻辑。数据持久层MyBatis-Plus核心价值在经典ORM框架MyBatis的基础上只做增强不做改变提供了强大的CRUD增删改查通用Mapper和Service无需编写繁琐的XML映射文件即可实现单表操作。在本项目中的作用极大提升开发效率。例如对于Car车辆表的增删改查通过继承BaseMapperCar即可直接使用insert(),selectById(),updateById(),deleteById()等方法省去大量基础SQL编写工作。视图模板引擎Thymeleaf核心价值一个适用于Web和独立环境的现代服务器端Java模板引擎。它语法自然能直接在浏览器中打开显示静态原型也支持Spring Boot的完美集成。在本项目中的作用用于渲染后端数据到HTML页面。它可以将后端Controller传递的Model数据如客户列表ListCustomer动态地填充到HTML模板中生成最终的视图页面。与JSP相比它更符合现代Web开发规范。前端技术HTML5 CSS3 JavaScript (Ajax)核心价值构建现代、响应式用户界面的基石。HTML5提供语义化结构CSS3负责样式和布局JavaScript实现交互逻辑。在本项目中的作用H5/CSS3构建管理系统后台的页面布局、表单、表格、按钮等UI组件。Ajax实现页面的局部刷新和无刷新提交。例如在客户列表页面点击“删除”按钮通过Ajax向后台发送请求删除成功后仅刷新列表数据区域而无需重载整个页面提升用户体验。数据库MySQL 5.7/8.0核心价值开源、流行、性能优异的关系型数据库。在本项目中的作用存储所有业务数据如用户表、客户表、车辆表、订单表等。通过MyBatis-Plus进行对象关系映射ORM操作。项目管理与构建Maven核心价值项目对象模型POM用于管理项目的构建、报告和文档。它通过一个中央仓库统一管理项目依赖JAR包。在本项目中的作用在pom.xml文件中声明项目所需的Spring Boot、MyBatis-Plus、MySQL驱动等依赖Maven会自动从仓库下载解决依赖冲突并执行编译、打包等生命周期任务。开发工具IntelliJ IDEA核心价值业界公认的高效Java集成开发环境IDE对Spring Boot和Maven提供了顶级支持。在本项目中的作用提供智能代码补全、一键运行、调试、数据库工具窗口等极大提升开发效率和体验。3. 环境准备与项目初始化在开始编码之前请确保你的开发环境已就绪。以下版本为推荐配置你可以根据实际情况调整。3.1 基础环境安装与配置Java开发工具包 (JDK)版本JDK 8 或 JDK 11Spring Boot 2.x广泛兼容。推荐使用JDK 11它是目前长期支持LTS版本。验证打开命令行输入java -version应能看到类似java version “11.0.xx”的输出。配置确保已正确设置JAVA_HOME环境变量。项目管理与构建工具 (Maven)版本Maven 3.6.x 或更高版本。验证命令行输入mvn -v应显示Maven版本信息。配置建议配置Maven的本地仓库路径和阿里云镜像settings.xml以加速依赖下载。数据库 (MySQL)版本MySQL 5.7 或 8.0。操作安装后启动MySQL服务。使用命令行或图形化工具如Navicat、MySQL Workbench创建一个新的数据库例如命名为car_4s_db字符集建议使用utf8mb4。集成开发环境 (IDE)推荐IntelliJ IDEA Ultimate 或 Community Edition。Community版对Spring Boot支持足够。确保已安装Maven插件通常已内置。3.2 使用Spring Initializr快速初始化项目Spring Initializr是官方提供的项目生成器可以快速搭建一个Spring Boot项目骨架。访问在浏览器中打开 https://start.spring.io IDEA中也内置了此功能。填写项目元数据Project: Maven ProjectLanguage: JavaSpring Boot: 选择一个稳定的2.x版本如2.7.18Group:com.example(可改为你的组织域名如com.yourcompany)Artifact:car-4s-systemName:car-4s-systemDescription: 汽车4S店管理系统Package name: 自动生成如com.example.car4ssystemPackaging: JarJava: 选择你安装的JDK版本如11添加依赖在“Dependencies”区域搜索并添加以下依赖Spring Web(用于构建Web MVC)Thymeleaf(模板引擎)MyBatis Framework(或直接搜索MyBatis Plus但Initializr可能没有需后续手动添加)MySQL Driver(数据库驱动)Lombok(简化Java Bean代码可选但推荐)生成项目点击“Generate”按钮下载生成的ZIP压缩包。导入IDE解压ZIP包用IntelliJ IDEA打开该文件夹。IDEA会自动识别为Maven项目并开始下载依赖。3.3 手动补充关键依赖与配置由于Spring Initializr可能没有MyBatis-Plus我们需要手动在pom.xml中添加。添加MyBatis-Plus依赖打开项目根目录下的pom.xml文件在dependencies节点内添加!-- MyBatis-Plus 启动器 -- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version !-- 请查看官网使用最新稳定版 -- /dependency配置数据库连接打开src/main/resources/application.properties文件或新建application.yml添加以下配置# 服务器端口 server.port8080 # 数据库连接配置 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver spring.datasource.urljdbc:mysql://localhost:3306/car_4s_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai spring.datasource.usernameroot spring.datasource.passwordyour_password # 替换为你的MySQL密码 # MyBatis-Plus 配置 mybatis-plus.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl # 控制台打印SQL开发环境使用 mybatis-plus.global-config.db-config.id-typeauto # 主键策略数据库自增 mybatis-plus.configuration.map-underscore-to-camel-casetrue # 自动驼峰命名转换 # Thymeleaf 配置 spring.thymeleaf.cachefalse # 开发时关闭缓存修改模板立即生效 spring.thymeleaf.prefixclasspath:/templates/ spring.thymeleaf.suffix.html spring.thymeleaf.modeHTML spring.thymeleaf.encodingUTF-8注意请将your_password替换为你MySQL数据库的实际密码并确保数据库car_4s_db已创建。4. 核心模块设计与代码实现我们将以“客户信息管理”模块为例详细展示从数据库表设计、实体类创建、Mapper/Service编写到Controller和前端页面的完整开发流程。理解了这个模块其他模块如车辆、销售的开发模式是相通的。4.1 数据库表设计首先在MySQL的car_4s_db数据库中创建客户表t_customer。CREATE TABLE t_customer ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键ID, customer_name varchar(50) NOT NULL COMMENT 客户姓名, gender tinyint(1) DEFAULT 0 COMMENT 性别 (0:未知, 1:男, 2:女), phone varchar(20) NOT NULL COMMENT 手机号, email varchar(100) DEFAULT NULL COMMENT 邮箱, address varchar(255) DEFAULT NULL COMMENT 地址, id_card varchar(20) DEFAULT NULL COMMENT 身份证号, intention_model varchar(100) DEFAULT NULL COMMENT 意向车型, source varchar(50) DEFAULT NULL COMMENT 客户来源 (如线上咨询、朋友介绍), status tinyint(1) DEFAULT 1 COMMENT 状态 (1:潜在客户, 2:已购车客户, 3:流失客户), remark text COMMENT 备注, create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, PRIMARY KEY (id), UNIQUE KEY uk_phone (phone) COMMENT 手机号唯一 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT客户信息表;4.2 创建实体类 (Entity)在Java项目中实体类与数据库表一一对应。我们使用Lombok注解来简化Getter/Setter等方法。在src/main/java/com/example/car4ssystem/下创建entity包。在entity包下创建Customer.java类。package com.example.car4ssystem.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date; Data // Lombok注解自动生成getter, setter, toString等方法 TableName(t_customer) // MyBatis-Plus注解指定对应数据库表名 public class Customer { /** * 主键ID */ TableId(type IdType.AUTO) // 主键自增 private Long id; /** * 客户姓名 */ private String customerName; /** * 性别 (0:未知, 1:男, 2:女) */ private Integer gender; /** * 手机号 */ private String phone; /** * 邮箱 */ private String email; /** * 地址 */ private String address; /** * 身份证号 */ private String idCard; /** * 意向车型 */ private String intentionModel; /** * 客户来源 */ private String source; /** * 状态 (1:潜在客户, 2:已购车客户, 3:流失客户) */ private Integer status; /** * 备注 */ private String remark; /** * 创建时间 */ private Date createTime; /** * 更新时间 */ private Date updateTime; }4.3 创建Mapper接口Mapper接口用于定义数据访问操作。MyBatis-Plus的强大之处在于我们只需继承其提供的BaseMapper接口即可获得大部分单表CRUD方法。在src/main/java/com/example/car4ssystem/下创建mapper包。在mapper包下创建CustomerMapper.java接口。package com.example.car4ssystem.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.car4ssystem.entity.Customer; import org.apache.ibatis.annotations.Mapper; Mapper // 标识这是一个MyBatis的MapperSpring Boot会自动扫描并注入 public interface CustomerMapper extends BaseMapperCustomer { // 无需编写任何方法BaseMapper已提供了 insert, selectById, updateById, deleteById, selectList 等基础方法。 // 如果需要复杂的多表关联查询可以在这里定义新的方法并在对应的XML文件中编写SQL。 }4.4 创建Service层Service层负责业务逻辑处理是Controller和Mapper之间的桥梁。我们同样可以继承MyBatis-Plus提供的通用Service接口。在src/main/java/com/example/car4ssystem/下创建service包。在service包下创建CustomerService.java接口和其实现类CustomerServiceImpl.java。接口定义 (CustomerService.java):package com.example.car4ssystem.service; import com.baomidou.mybatisplus.extension.service.IService; import com.example.car4ssystem.entity.Customer; public interface CustomerService extends IServiceCustomer { // 可以在此定义一些特殊的业务方法例如根据手机号查询客户 Customer getCustomerByPhone(String phone); }实现类 (CustomerServiceImpl.java):package com.example.car4ssystem.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.car4ssystem.entity.Customer; import com.example.car4ssystem.mapper.CustomerMapper; import com.example.car4ssystem.service.CustomerService; import org.springframework.stereotype.Service; Service // 标识这是一个Spring Service会被自动注入 public class CustomerServiceImpl extends ServiceImplCustomerMapper, Customer implements CustomerService { Override public Customer getCustomerByPhone(String phone) { // 使用MyBatis-Plus的查询构造器构建查询条件 LambdaQueryWrapperCustomer queryWrapper new LambdaQueryWrapper(); queryWrapper.eq(Customer::getPhone, phone); // 相当于 SQL: where phone #{phone} return this.getOne(queryWrapper); // 查询单条记录 } }4.5 创建Controller层Controller层接收前端请求调用Service处理业务并返回响应跳转页面或JSON数据。在src/main/java/com/example/car4ssystem/下创建controller包。在controller包下创建CustomerController.java。package com.example.car4ssystem.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.car4ssystem.entity.Customer; import com.example.car4ssystem.service.CustomerService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.util.List; Controller // 标识这是一个Spring MVC Controller处理Web请求 RequestMapping(/customer) // 定义请求路径前缀所有该Controller下的请求都以 /customer 开头 public class CustomerController { Autowired private CustomerService customerService; /** * 跳转到客户列表页面并分页查询客户数据 * param pageNum 当前页码默认为1 * param pageSize 每页条数默认为10 * param model Spring MVC的Model用于向页面传递数据 * return 视图名称对应templates下的customer/list.html */ GetMapping(/list) public String list(RequestParam(value pageNum, defaultValue 1) Integer pageNum, RequestParam(value pageSize, defaultValue 10) Integer pageSize, Model model) { // 1. 构建分页对象 PageCustomer page new Page(pageNum, pageSize); // 2. 构建查询条件这里先不做条件筛选 LambdaQueryWrapperCustomer queryWrapper new LambdaQueryWrapper(); queryWrapper.orderByDesc(Customer::getCreateTime); // 按创建时间倒序 // 3. 执行分页查询 PageCustomer customerPage customerService.page(page, queryWrapper); // 4. 将分页结果放入Model供页面使用 model.addAttribute(page, customerPage); return customer/list; // 返回视图路径Thymeleaf会解析为 /templates/customer/list.html } /** * 跳转到新增客户页面 */ GetMapping(/toAdd) public String toAdd() { return customer/add; } /** * 处理新增客户请求 * param customer 前端表单提交的客户数据Spring MVC会自动绑定到Customer对象 * return 重定向到列表页 */ PostMapping(/add) public String add(Customer customer) { customerService.save(customer); // 调用Service的save方法 return redirect:/customer/list; // 使用重定向防止表单重复提交 } /** * 跳转到编辑客户页面并回显数据 * param id 客户ID * param model * return */ GetMapping(/toEdit/{id}) public String toEdit(PathVariable Long id, Model model) { Customer customer customerService.getById(id); model.addAttribute(customer, customer); return customer/edit; } /** * 处理编辑客户请求 * param customer * return */ PostMapping(/edit) public String edit(Customer customer) { customerService.updateById(customer); // 根据ID更新 return redirect:/customer/list; } /** * 处理删除客户请求使用Ajax返回JSON * param id * return */ DeleteMapping(/delete/{id}) ResponseBody // 表示返回的是JSON数据而不是视图名 public String delete(PathVariable Long id) { boolean success customerService.removeById(id); if (success) { return success; } else { return error; } } }4.6 创建前端页面 (Thymeleaf模板)Thymeleaf模板文件放在src/main/resources/templates/目录下。我们创建客户管理的相关页面。列表页面 (/templates/customer/list.html): 这是一个关键页面展示了如何使用Thymeleaf语法遍历数据、实现分页和Ajax删除。!DOCTYPE html html langzh-CN xmlns:thhttp://www.thymeleaf.org head meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 title客户列表 - 汽车4S店管理系统/title !-- 引入Bootstrap CSS快速构建样式 -- link hrefhttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.1.3/css/bootstrap.min.css relstylesheet !-- 引入jQuery用于Ajax操作 -- script srchttps://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js/script /head body div classcontainer-fluid mt-4 h2客户信息管理/h2 a th:href{/customer/toAdd} classbtn btn-primary mb-3新增客户/a table classtable table-bordered table-hover thead classtable-light tr thID/th th客户姓名/th th性别/th th手机号/th th意向车型/th th状态/th th创建时间/th th操作/th /tr /thead tbody !-- Thymeleaf循环遍历 page.records 列表 -- tr th:eachcustomer : ${page.records} td th:text${customer.id}/td td th:text${customer.customerName}/td td span th:switch${customer.gender} span th:case1男/span span th:case2女/span span th:case*未知/span /span /td td th:text${customer.phone}/td td th:text${customer.intentionModel}/td td span th:switch${customer.status} span th:case1 classbadge bg-warning潜在客户/span span th:case2 classbadge bg-success已购车/span span th:case3 classbadge bg-secondary流失客户/span /span /td td th:text${#dates.format(customer.createTime, yyyy-MM-dd HH:mm)}/td td a th:href{/customer/toEdit/{id}(id${customer.id})} classbtn btn-sm btn-outline-primary编辑/a button classbtn btn-sm btn-outline-danger onclickdeleteCustomer([[${customer.id}]])删除/button /td /tr /tbody /table !-- 分页组件 -- nav aria-labelPage navigation ul classpagination justify-content-center li classpage-item th:classappend${page.current 1} ? disabled : a classpage-link th:href{/customer/list(pageNum${page.current}-1)}上一页/a /li !-- 遍历页码这里简化显示实际项目可以优化页码逻辑 -- li th:eachi : ${#numbers.sequence(1, page.pages)} classpage-item th:classappend${i page.current} ? active : a classpage-link th:href{/customer/list(pageNum${i})} th:text${i}/a /li li classpage-item th:classappend${page.current page.pages} ? disabled : a classpage-link th:href{/customer/list(pageNum${page.current}1)}下一页/a /li /ul /nav /div script // 使用Ajax删除客户 function deleteCustomer(id) { if (confirm(确定要删除这条客户记录吗)) { $.ajax({ url: /customer/delete/ id, type: DELETE, // 使用DELETE方法对应Controller中的 DeleteMapping success: function(result) { if (result success) { alert(删除成功); location.reload(); // 刷新页面 } else { alert(删除失败); } }, error: function() { alert(请求出错); } }); } } /script /body /html新增/编辑页面 (/templates/customer/add.html和edit.html): 这两个页面结构类似主要是一个表单。edit.html会通过Thymeleaf回显数据。!-- add.html -- !DOCTYPE html html langzh-CN xmlns:thhttp://www.thymeleaf.org head meta charsetUTF-8 title新增客户/title link hrefhttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.1.3/css/bootstrap.min.css relstylesheet /head body div classcontainer mt-4 h2新增客户/h2 form th:action{/customer/add} methodpost div classmb-3 label forcustomerName classform-label客户姓名/label input typetext classform-control idcustomerName namecustomerName required /div div classmb-3 label forphone classform-label手机号/label input typetel classform-control idphone namephone required /div div classmb-3 label forintentionModel classform-label意向车型/label input typetext classform-control idintentionModel nameintentionModel /div !-- 其他字段省略按需添加 -- button typesubmit classbtn btn-primary提交/button a th:href{/customer/list} classbtn btn-secondary返回/a /form /div /body /html!-- edit.html -- !DOCTYPE html html langzh-CN xmlns:thhttp://www.thymeleaf.org head meta charsetUTF-8 title编辑客户/title link hrefhttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.1.3/css/bootstrap.min.css relstylesheet /head body div classcontainer mt-4 h2编辑客户/h2 form th:action{/customer/edit} methodpost !-- 隐藏域用于传递ID -- input typehidden th:value${customer.id} nameid div classmb-3 label forcustomerName classform-label客户姓名/label input typetext classform-control idcustomerName namecustomerName th:value${customer.customerName} required /div div classmb-3 label forphone classform-label手机号/label input typetel classform-control idphone namephone th:value${customer.phone} required /div div classmb-3 label forintentionModel classform-label意向车型/label input typetext classform-control idintentionModel nameintentionModel th:value${customer.intentionModel} /div !-- 其他字段回显 -- button typesubmit classbtn btn-primary保存/button a th:href{/customer/list} classbtn btn-secondary返回/a /form /div /body /html4.7 运行与验证启动项目找到主启动类通常位于src/main/java/com/example/car4ssystem/下类名如Car4sSystemApplication右键运行main方法。访问系统控制台看到Tomcat started on port(s): 8080后在浏览器打开http://localhost:8080。访问客户列表由于我们还没有配置默认首页可以直接访问http://localhost:8080/customer/list。功能测试点击“新增客户”填写表单提交观察列表是否新增数据。点击“编辑”修改信息后保存。点击“删除”测试Ajax删除功能。测试分页功能。5. 项目扩展与模块开发思路完成客户管理模块后其他模块的开发可以遵循相同的“Entity - Mapper - Service - Controller - View”模式。以下是其他核心模块的简要设计思路车辆库存管理 (t_car)字段id,brand(品牌),model(型号),color,vin(车架号),price,stock_status(库存状态),warehouse_location(仓库位置)等。功能车辆入库、出库、库存查询、状态变更。销售订单管理 (t_sale_order)字段id,order_no(订单号),customer_id(关联客户),car_id(关联车辆),salesperson_id(销售员),total_amount(总金额),order_status(订单状态)等。功能创建订单、关联客户与车辆、订单状态流转待付款、已付款、已交付、订单查询。系统用户/权限管理这是更复杂的模块通常涉及t_user(用户),t_role(角色),t_menu(菜单),t_user_role(用户角色关联),t_role_menu(角色菜单关联) 等多张表。可以使用成熟的权限框架如Spring Security或Apache Shiro来集成实现登录认证和菜单权限控制。对于毕业设计或学习项目也可以实现一个简单的基于Session或Token的拦截器来做权限验证。6. 常见问题与排查思路 (FAQ)在开发和学习过程中你可能会遇到以下典型问题问题现象可能原因排查思路与解决方案启动报错Failed to configure a DataSource1.application.properties中数据库连接信息错误。2. MySQL服务未启动。3. 依赖中缺少数据库驱动。1. 检查spring.datasource.url,username,password是否正确。2. 命令行运行mysql -u root -p测试连接。3. 检查pom.xml中是否有mysql-connector-java依赖。访问页面报404错误1. Controller的RequestMapping路径写错。2. 静态资源或模板文件位置放错。3. 未添加Controller或RestController注解。1. 检查浏览器地址栏URL与Controller中定义的路径是否匹配。2. Thymeleaf模板应放在resources/templates/下且Controller返回的字符串与之对应。3. 确认类上有Controller注解。页面显示Whitelabel Error Page通常是因为没有匹配的请求映射或者跳转的视图不存在。查看控制台日志是否有异常堆栈。检查请求的URL和Controller方法。插入中文到数据库变成乱码数据库、连接字符串、项目编码不统一。1. 确保MySQL数据库、表、字段的字符集为utf8mb4。2. 检查JDBC连接URL是否包含characterEncodingutf8。3. 确保项目文件编码IDEA中 File - Settings - Editor - File Encodings均为UTF-8。MyBatis-Plus 的BaseMapper方法不生效1. 实体类未加TableName注解或表名不对。2. Mapper接口未加Mapper注解或未被扫描到。3. 主键策略TableId配置错误。1. 检查实体类与数据库表名映射。2. 在主启动类上添加MapperScan(“com.example.car4ssystem.mapper”)注解。3. 确认数据库主键是自增的且实体类TableId(type IdType.AUTO)。Ajax删除请求返回405错误Controller中处理删除的方法使用了PostMapping但前端Ajax请求类型是DELETE。将Controller中的删除方法注解改为DeleteMapping并确保前端Ajax的type也为‘DELETE’。Spring MVC需要匹配。7. 项目部署与上线建议学习或毕设演示后你可能希望将项目部署到服务器。打包项目在项目根目录下执行Maven命令mvn clean package。成功后会在target目录下生成一个car-4s-system-0.0.1-SNAPSHOT.jar文件。准备服务器环境在Linux或Windows服务器上安装好JDK版本与开发环境一致。上传与运行将JAR包上传到服务器使用命令java -jar car-4s-system-0.0.1-SNAPSHOT.jar运行。程序会在内嵌的Tomcat中启动。后台运行在Linux上可以使用nohup java -jar your-app.jar app.log 21 命令让程序在后台运行并将日志输出到app.log文件。连接生产数据库修改application.properties中的数据库连接信息指向服务器的MySQL地址然后重新打包。更规范的做法是使用application-prod.properties配置文件并通过--spring.profiles.activeprod启动参数来激活生产环境配置。这个基于Spring Boot H5/CSS3的汽车4S店管理系统项目完整覆盖了从环境搭建、技术选型、数据库设计、后端开发到前端交互的全流程。通过亲手实现和调试你不仅能巩固Spring Boot、MyBatis-Plus等核心框架的应用更能深刻理解一个业务系统是如何分层、模块化并协同工作的。建议你在掌握本示例的基础上尝试独立完成车辆管理、销售订单等模块并思考如何加入更复杂的业务逻辑如库存预警、销售统计图表这会让你的项目更加出彩无论是用于技能提升还是毕业设计都将是一份扎实的成果。