-
MySQL 服务已安装并启动:推荐 MySQL 8.0(主流版本)或 5.7(兼容稳定)。
-
创建测试数据库
:比如新建名为
1demo_db的数据库(字符集建议
1utf8mb4,支持 emoji 等特殊字符):
1CREATE DATABASE IF NOT EXISTS demo_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -
Spring Boot 项目已搭建:确保基础环境(JDK、Maven)正常。
二、核心步骤:Spring Boot 整合 MySQL
步骤 1:引入依赖(pom.xml)
Spring Boot 整合 MySQL 需引入JDBC 启动器、MySQL 驱动,推荐搭配 MyBatis-Plus(简化数据库操作,新手友好),依赖如下:
|
|
版本适配说明:
- MySQL 8.0+:驱动用
mysql-connector-j(Spring Boot 2.7+ 推荐),旧版mysql-connector-java也兼容,但已标记为过时。 - MySQL 5.7:驱动可继续用
mysql-connector-java(版本 8.0 也兼容 5.7)。
步骤 2:编写数据库连接配置(application.properties)
在 src/main/resources 下的 application.properties(或 application.yml,推荐 yml 格式)中配置 MySQL 连接信息,两种格式任选:
格式 1:application.properties(传统键值对)
|
|
格式 2:application.yml(更简洁,推荐)
|
|
关键配置说明:
-
1spring.datasource.url核心参数:
localhost:3306:MySQL 地址和端口(默认 3306)。demo_db:你创建的数据库名。serverTimezone=Asia/Shanghai:解决时区报错(MySQL 8.0+ 必加)。allowPublicKeyRetrieval=true:解决 MySQL 8.0 连接时的公钥检索报错。useSSL=false:开发环境关闭 SSL,避免警告。
-
1driver-class-name:
- MySQL 8.0+:
com.mysql.cj.jdbc.Driver(带cj)。 - MySQL 5.7:
com.mysql.jdbc.Driver(无cj,但 8.0 驱动也兼容)。
- MySQL 8.0+:
-
连接池:Spring Boot 默认使用 HikariCP(性能最优),无需额外引入依赖,配置参数即可。
步骤 3:创建数据库表(测试用)
在 MySQL 中执行以下 SQL,创建 user 表:
|
|
步骤 4:编写实体类(Entity)
在 com.example.demo 下新建 entity 包,创建 User.java:
|
|
步骤 5:编写数据访问层(Mapper)
MyBatis-Plus 提供了 BaseMapper,无需手动写 SQL 即可实现基础 CRUD:
-
新建
1mapper包,创建
1UserMapper.java1 2 3 4 5 6 7 8 9 10 11package com.example.demo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.demo.entity.User; import org.apache.ibatis.annotations.Mapper; // 标记为 MyBatis Mapper 接口 @Mapper public interface UserMapper extends BaseMapper<User> { // 继承 BaseMapper 后,自动拥有 selectList、insert、update、delete 等方法,无需手动实现 } -
(可选)在启动类上添加
1@MapperScan,批量扫描 Mapper 包(替代每个 Mapper 加
1@Mapper):
1 2 3 4 5 6 7 8 9 10 11 12 13 14package com.example.demo; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication // 扫描 mapper 包下所有接口 @MapperScan("com.example.demo.mapper") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
步骤 6:编写控制器测试数据库操作
新建 controller 包,创建 UserController.java:
|
|
三、启动测试
-
启动 Spring Boot 项目,确保控制台无数据库连接报错。
-
访问接口验证:
-
查询所有用户:
1http://localhost:8080/users输出(JSON 格式):
1[{"id":1,"userName":"张三","age":20,"email":"zhangsan@demo.com"},{"id":2,"userName":"李四","age":25,"email":"lisi@demo.com"}] -
根据 ID 查询:
1http://localhost:8080/user/1输出:
1{"id":1,"userName":"张三","age":20,"email":"zhangsan@demo.com"} -
根据用户名模糊查询:
1http://localhost:8080/user/name/张输出:
1[{"id":1,"userName":"张三","age":20,"email":"zhangsan@demo.com"}]
-
四、常见问题及解决方案
问题 1:数据库连接失败(Access denied for user ‘root’@’localhost’)
-
原因:用户名 / 密码错误,或 MySQL 权限不足。
-
解决方案:
-
确认
application.properties中的username/password与 MySQL 登录信息一致。 -
给 root 用户授权(解决远程连接 / 权限问题):
1 2ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;
-
问题 2:Time zone issue(时区报错)
-
原因:MySQL 8.0+ 默认时区与系统时区不一致。
-
解决方案:
-
URL 中添加
serverTimezone=Asia/Shanghai(必加)。 -
或修改 MySQL 全局时区:
1SET GLOBAL time_zone = '+8:00';
-
问题 3:Public Key Retrieval is not allowed(公钥检索报错)
- 原因:MySQL 8.0 安全策略限制公钥检索。
- 解决方案:URL 中添加
allowPublicKeyRetrieval=true。
问题 4:Mapper 注入失败(Could not autowire. No beans of ‘UserMapper’ type found)
-
原因:未加
@Mapper注解,或@MapperScan扫描路径错误。 -
解决方案:
- 给
UserMapper加@Mapper注解。 - 或在启动类上加
@MapperScan("com.example.demo.mapper"),确保路径正确。
- 给
总结
- 核心配置:引入 JDBC + MySQL 驱动 → 配置
application.yml中的数据库连接信息(URL / 用户名 / 密码 / 驱动类)→ 配置 MyBatis-Plus 简化 CRUD。 - 关键注意:MySQL 8.0+ 需指定时区、公钥检索参数,驱动类用
com.mysql.cj.jdbc.Driver;连接池默认用 HikariCP,无需额外配置即可使用。 - 验证方式:编写简单查询接口,访问后能返回数据库数据,说明配置成功。