SpringBoot + MyBatis 整合入门:从零搭建与核心踩坑实战
一、 实验目的
本项目的核心目标分为两个模块:
-
整合 SpringBoot HelloWorld 程序:实现基本的 Web 请求响应。
-
整合 MyBatis 框架:通过 MyBatis 读取 MySQL 数据库中的真实数据,并以 JSON 格式返回给前端页面。 项目致力于保证代码的高可复用性与跨设备的运行一致性。
二、 数据库准备
为了保证项目拉取后能直接测试,附上本项目的初始化 SQL 脚本。
💡 操作指南:在 MySQL 客户端或 Navicat 中直接运行此脚本即可完成建库、建表及测试数据的准备。
-- 创建数据库
CREATE DATABASE IF NOT EXISTS `mybatis` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE `mybatis`;
-- 删除已存在的表(防止重复运行报错)
DROP TABLE IF EXISTS `user`;
-- 创建 user 表
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(50) NOT NULL COMMENT '姓名',
`age` int DEFAULT NULL COMMENT '年龄',
`sex` varchar(10) DEFAULT NULL COMMENT '性别',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
-- 插入测试数据 (对应你浏览器跑出来的张三和李四)
INSERT INTO `user` (`name`, `age`, `sex`, `create_time`) VALUES
('zhangsan', 18, '1', '2026-04-14 18:38:36'),
('lisi', 19, '1', '2026-04-14 18:38:36'),
('zhangsan', 18, '1', '2022-07-21 18:03:02'),
('lisi', 19, '1', '2022-07-21 18:03:05');
三、 项目架构与目录说明
本项目严格遵循经典的分层架构(Controller -> Service -> Mapper -> Data),目录结构如下:
com.example.springboot_study
├── controller
│ └── HelloController.java // 接收前端请求,暴露 /hello 接口
├── domain
│ └── User.java // 实体类,与数据库字段一一对应
├── mapper
│ └── UserMapper.java // MyBatis 接口,定义数据访问方法
├── service
│ ├── UserService.java // 业务逻辑接口
│ └── impl
│ └── UserServiceImpl.java // 业务逻辑实现类
└── SpringbootStudyApplication.java // SpringBoot 主启动类
resources
├── mapper
│ └── UserMapper.xml // MyBatis 映射文件,编写原生 SQL
└── application.yml // 核心配置文件(数据库连接等)

四、 核心配置与代码实现
1. 核心依赖 (pom.xml)
引入了 Spring Web 和 MyBatis 的 Starter,以及 MySQL 驱动:

2. 数据库连接配置 (application.yml)

3. Controller 层实现

五、 测试与运行结果
1.测试自己电脑
启动 SpringbootStudyApplication 后,控制台输出 Started SpringbootStudyApplication,代表内置 Tomcat 启动成功。 打开浏览器访问 http://localhost:8080/hello,成功获取到数据库中的 JSON 数据:


2.测试同学电脑
为验证项目的可移植性,邀请同学将本项目代码压缩包下载至其本地环境运行。
1.环境准备:同学先执行了项目附带的 mybatis.sql 脚本,快速搭建了相同的数据库环境。
2.后端启动:如下图所示,项目在不同设备上均能成功启动,Tomcat 运行在 8080 端口。

3.前端展示:如下图所示,通过浏览器访问 /hello 接口,准确获取到了预设的用户 JSON 数据。

结论:测试结果与开发环境完全一致,项目具备生产环境部署的稳定性。
六、 🚨 踩坑记录与解决方案
在本次实验中,我遇到了几个非常典型的环境与配置问题,经过排查已彻底解决:
1.依赖下载失败
现象:org.apache.ibatis 等包爆红,提示找不到符号。

原因与解决:pom.xml 中 MySQL 驱动未指定明确版本或 Web 依赖名称拼写错误导致 Maven 下载中断。修正 pom.xml 并强制 Reload Maven 后解决。

2.包路径扫描不到组件:
现象:报黄提示“Java 文件位于模块源根之外”,或启动后报 404。

原因与解决:IDEA 未将 java 文件夹识别为 Sources Root;且包目录层级错误(controller 等包与主启动类并列了)。将包拖入主包路径下,确保主启动类在最外层即可被自动扫描。
3.高版本 SpringBoot 与 MyBatis 冲突:
现象:报错 Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required。

原因与解决:使用的 Spring Boot 版本较新,导致 MyBatis Starter 没能成功自动注入 SqlSessionFactory。最终通过在主启动类中手动 @Bean 注入 SqlSessionFactory 绕过版本 Bug,完美打通底层数据流。

总结:本次作业不仅完成了代码功能的实现,更让我深刻认识到了 Java 开发中“约定大于配置”的重要性,以及在面对复杂报错时,梳理依赖和底层注入逻辑的关键性。
更多推荐



所有评论(0)