SpringBoot搭建项目调试与问题解决

紧接上文,我想提供一些我在搭建项目过程中反复遇到的一些问题:

第五阶段:项目调试与问题解决

5.1 常见错误与解决方案

问题1:登录失败 - MyBatis 绑定异常:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ljl.news.dao.LoginDao.login

出现场景 :

  • 前端点击登录按钮,后端报错

  • 反复尝试修改 @Param 注解和 XML 配置都不行
    问题原因 :

1. @Param 注解与 XML 参数引用不匹配 :

- LoginDao.java 中 : Admin login(@Param("admin") Admin admin);

- LoginMapper.xml 中 : where account = #{account}

- 应该是 : where account = #{admin.account}
2. 配置问题 :

- mapper-locations 路径配置

- namespace 与接口全限定名不匹配

解决方案 :

// LoginDao.java
@Mapper
public interface LoginDao {
Admin login(Admin admin); // 去掉 @Param 注解,直接传递对象
}

<!-- LoginMapper.xml -->
<select id="login" resultType="com.ljl.news.model.Admin">
select id, account, password from admin
where account = #{account} and password = #{password}
</select>

问题2:数据库连接失败 - 驱动不接受 JDBC URL

错误信息 :

Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl

出现场景 :

**- 后端启动时立即失败

  • 反复修改 JDBC URL、添加各种参数都不行
  • 尝试过 MySQL 8.0 驱动、HikariCP、Druid 连接池都失败**

问题原因 :

  • MySQL 8.0 驱动与 URL 兼容性问题 :

  • MySQL 8.0 的 com.mysql.cj.jdbc.Driver 对 URL 格式要求严格

  • 时区参数、SSL 参数等容易导致问题

  • Druid 连接池版本过旧 :

  • 使用的 Druid 1.1.10 与 MySQL 8.0 驱动配合有问题

解决方案 :

<!-- pom.xml - 使用 MySQL 5.x 驱动 -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.49</version>

<scope>runtime</scope>

</dependency>

application.yml - 使用简单的 URL

spring:

datasource:

driver-class-name: com.mysql.jdbc.Driver

url: jdbc:mysql://localhost:3306/newsdb?useUnicode=true&characterEncoding=utf8

username: root

password: root

经验教训 :

**- MySQL 5.x 驱动通常可以兼容 MySQL 8.0 数据库

  • 简单的 JDBC URL 更稳定
  • 不要过度复杂化配置,先让它跑起来再说**

问题3:数据库连接超时

错误信息 :

java.sql.SQLException: connect error, url jdbc:mysql://127.0.0.1:3306/newsdb

出现场景 :

- 后端启动后,数据库连接池不断尝试连接失败

  • 检查了防火墙、MySQL 服务状态都正常

  • SQLyog 可以正常连接数据库,但 Spring Boot 不行
    问题排查过程 :

  • ✅确认 MySQL 服务正在运行

  • ✅ 确认用户名密码正确

  • ✅ 确认数据库存在

  • ✅ 确认防火墙没有阻止

  • ❌ 问题依然存在..

最终解决方案 :

改用 MySQL 5.x 驱动 + 简单 URL(同问题2)

问题4:前端启动方式混淆

问题描述 :

  • 用户有两种启动前端的方式:
  1. 命令行 npm run serve → http://localhost:8081

  2. HBuilder 直接打开 HTML → http://127.0.0.1:8848

两种方式都试过,不知道该用哪个

核心区别 :

经验教训 :

  • Vue 项目 ≠ 传统 HTML 项目

  • Vue CLI 开发服务器是必须的

  • 不要图省事用 HBuilder 直接打开

问题5:404 错误 - 后端接口缺失

错误信息 :

Request failed with status code 404

出现场景 :

- 登录成功后,进入管理员管理页面

  • 点击"新增管理员"按钮,报错 404

  • 查询列表也不行
    问题原因 :

- 后端只有 /admin/admins 接口

  • 前端调用的是:

  • /admin/list (查询列表)

  • /admin/add (新增)

  • /admin/update (更新)

  • /admin/delete/{id} (删除)

  • /menu/list (菜单列表)

  • 接口路径不匹配!
    解决方案 :

- 完善后端所有接口(见前面的完整代码)
经验教训 :

- 先确认前后端接口约定

  • 接口路径、请求方法、参数都要一致

  • 可以用 Postman 先测试后端接口

问题6:返回格式不匹配

问题描述 :

  • 前端期望: { list: [], total: 0 }

  • 后端直接返回: ArrayList<Admin>

  • 前端无法正确解析

解决方案:

// 创建 PageResult 类

public class PageResult<T> {

private ArrayList<T> list;

private int total;

public PageResult(ArrayList<T> list, int total) {

this.list = list;

this.total = total;

}

// Getter 和 Setter

}

// Controller 中返回

PageResult<Admin> pageResult = adminService.getAdminList(...);

return new Result(200, "查询成功", pageResult);

经验教训 :

  • 统一返回格式很重要

  • 分页需要 list 和 total 两个字段

  • 前后端先约定好数据结构

问题7:target 目录旧文件问题

问题描述 :

- 修改了代码,但重启后还是旧行为

  • 怀疑是缓存问题

解决方案 :

  1. 停止后端服务

  2. 手动删除 target 目录

  3. IDEA → Build → Rebuild Project

  4. 重启后端服务

经验教训 :

  • 有时候需要"彻底重启"

  • 删除 target 目录是终极解决方案

  • Rebuild Project 比 Build 更彻底

5.2 调试技巧总结

技巧1:从简单开始

先让最简单的功能跑通,再逐步添加复杂性

示例 :

  1. 先写一个最简单的查询接口

  2. 确认数据库连接正常

  3. 再添加条件查询

  4. 最后添加分页

技巧2:分层调试

调试顺序 :

  1. 数据库层:先在 SQLyog 中测试 SQL

  2. Dao 层:确认 MyBatis 映射正确

  3. Service 层:确认业务逻辑

  4. Controller 层:确认接口返回

  5. 前端层:确认请求和展示

技巧3:工具使用
必备工具 :

  • SQLyog :测试 SQL、查看表结构

  • Postman :测试后端接口

  • 浏览器 F12 :查看网络请求、Console 日志

  • IDEA 断点 :后端代码调试 技巧4:日志输出
    关键位置加日志 :

public Admin login(Admin admin){

Admin loginAdmin = loginDao.login(admin);

System.out.println(loginAdmin); // 关键日志

return loginAdmin;

}
看到这个就成功了 :

Admin{id=1, account='admin', password='111'}

5.3 常见错误速查表

"可能原因"仅供参考,具体原因具体解决

5.4 心态与方法论

遇到问题时的心态:

  1. 不要慌 :99% 的问题都有解决方案

  2. 不要死磕 :一个方向不行就换个思路

  3. 记录问题 :把错误信息记下来,方便排查

  4. 分步验证 :不要一口气写太多代码,写一点测一点

开发方法论
增量开发

  1. 写一个小功能

  2. 测试通过

  3. 提交代码

  4. 写下一个小功能

而不是 :

  1. 一口气写完全部代码

  2. 发现一堆错误

  3. 不知道从哪开始改

总结

这次项目学到的核心经验:

  1. 简单胜过复杂 :MySQL 5.x 驱动 + 简单 URL 最稳定

  2. 先跑通再优化 :不要一开始就追求完美

  3. 前后端约定优先 :接口、数据格式先商量好

  4. 分层调试 :从数据库到前端,一步步来

  5. 日志是好朋友 :关键位置加输出,快速定位问题

  6. 删除 target 目录 :终极解决方案

  7. 心态很重要 :遇到问题别慌,换个思路

相关推荐
SimonKing2 小时前
多数据源:CSV、内存对象可以通过SQL查询,甚至联查,你敢信!
java·后端·程序员
毕设源码-钟学长2 小时前
【开题答辩全过程】以 高校疫情管理系统为例,包含答辩的问题和答案
java
cqbzcsq2 小时前
MC Forge1.20.1 mod开发学习笔记(数据生成、食物)
java·笔记·学习·mc
Hx_Ma162 小时前
mybatis练习2
java·数据库·mybatis
山北雨夜漫步2 小时前
MQ消息队列
java·开发语言
毕设源码-邱学长2 小时前
【开题答辩全过程】以 基于Web的小型宾馆客房管理系统为例,包含答辩的问题和答案
java
Zhu_S W2 小时前
EasyExcel:让Excel操作变得简单优雅
java·前端
爱学习的小可爱卢2 小时前
JavaSE基础-Java字符串转整数与拼接实战指南
java·开发语言