🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

Spring 与 MySQL 连接教程(Spring Boot 推荐方案)

✅ 一、Spring Boot 快速集成(5 分钟上手)

1️⃣ 前提条件

2️⃣ 创建项目(推荐)

3️⃣ 配置 application.yml(推荐)或 application.properties

4️⃣ 编写核心代码

5️⃣ 启动验证

⚠️ 二、高频问题解决方案

🔒 三、安全与生产建议

📌 四、传统 Spring(非 Boot)简要说明

🌟 总结


img

Spring 与 MySQL 连接教程(Spring Boot 推荐方案)

💡 核心提示:现代 Spring 项目强烈推荐使用 Spring Boot(自动配置、开箱即用)。传统 Spring 配置复杂且易错,本文以 Spring Boot 3.x 为主,附关键注意事项。


✅ 一、Spring Boot 快速集成(5 分钟上手)

1️⃣ 前提条件

  • JDK 17+(Spring Boot 3.x 要求)
  • MySQL 8.0+(推荐)或 5.7+
  • Maven/Gradle
  • 已创建空数据库(如 testdb):
    CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    

2️⃣ 创建项目(推荐)

访问 Spring Initializr

  • Project: Maven
  • Language: Java
  • Spring Boot: 3.2+(最新稳定版)
  • Dependencies:
    Spring Web + Spring Data JPA + MySQL Driver
  • 点击 Generate,解压导入 IDE

3️⃣ 配置 application.yml(推荐)或 application.properties

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=utf8
    username: root
    password: your_password  # ⚠️ 生产环境用环境变量!
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update  # 首次用 create,后续改 update;生产环境禁用!
    show-sql: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL8Dialect
        format_sql: true

🔑 关键参数说明

  • serverTimezone:避免时区错误(根据所在地修改)
  • allowPublicKeyRetrieval=true:仅开发环境使用,解决认证问题(生产需配 SSL)
  • characterEncoding=utf8:解决中文乱码

4️⃣ 编写核心代码

实体类 (User.java):

import jakarta.persistence.*;
import java.time.LocalDateTime;

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(nullable = false, length = 50)
    private String name;
    
    private String email;
    
    @Column(updatable = false)
    private LocalDateTime createdAt = LocalDateTime.now();
    
    // Getter/Setter 省略(建议用 Lombok)
}

Repository 接口 (UserRepository.java):

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    // 自动实现 CRUD,可扩展自定义查询方法
}

测试 Controller (TestController.java):

@RestController
@RequestMapping("/api/users")
public class TestController {
    @Autowired
    private UserRepository userRepository;

    @PostMapping
    public User create(@RequestBody User user) {
        return userRepository.save(user);
    }

    @GetMapping
    public List<User> getAll() {
        return userRepository.findAll();
    }
}

5️⃣ 启动验证

  1. 运行 Application.java
  2. 查看控制台日志:
    HikariPool-1 - Start completed.
    Hibernate: create table users ...
    
  3. 调用接口测试:
    POST http://localhost:8080/api/users + JSON Body
    GET http://localhost:8080/api/users

⚠️ 二、高频问题解决方案

问题现象 解决方案
Unknown system variable 'query_cache_size' 升级 MySQL 驱动至 8.0.33+
时区错误 The server time zone value ... URL 添加 &serverTimezone=Asia/Shanghai
认证失败 Public Key Retrieval is not allowed URL 添加 &allowPublicKeyRetrieval=true(开发环境)
中文乱码 URL 添加 &useUnicode=true&characterEncoding=utf8
驱动类找不到 确认依赖为 mysql-connector-j(Boot 3.x)或 mysql-connector-java(Boot 2.x)

🔒 三、安全与生产建议

  1. 密码管理
    password: ${DB_PASSWORD}  # 通过环境变量注入
    
  2. 禁用开发参数:生产环境移除 allowPublicKeyRetrieval=true,启用 SSL(useSSL=true
  3. 连接池优化application.yml):
    spring:
      datasource:
        hikari:
          maximum-pool-size: 10
          connection-timeout: 30000
    
  4. 不要提交密码.gitignore 中加入配置文件,使用 Spring Cloud Config 或 K8s Secrets

📌 四、传统 Spring(非 Boot)简要说明

若必须使用传统 Spring:

  1. 添加依赖:spring-jdbc + mysql-connector-j
  2. Java Config 配置 DataSource:
    @Bean
    public DataSource dataSource() {
        HikariDataSource ds = new HikariDataSource();
        ds.setJdbcUrl("jdbc:mysql://...");
        ds.setUsername("root");
        ds.setPassword("pwd");
        return ds;
    }
    
  3. 使用 JdbcTemplate 操作数据库

    💡 强烈建议:新项目直接使用 Spring Boot,传统方式配置繁琐且易出错。


🌟 总结

  • 首选 Spring Boot + JPA:自动配置、减少样板代码
  • 驱动选择
    Spring Boot 3.x → mysql-connector-j
    Spring Boot 2.x → mysql-connector-java
  • 调试技巧:开启 logging.level.org.springframework.jdbc=DEBUG 查看 SQL
  • 进阶学习
    → 事务管理 @Transactional
    → 多数据源配置
    → MyBatis 替代 JPA(按团队技术栈选择)

📚 官方文档参考:

动手实践是掌握的关键!遇到问题可检查日志、确认 MySQL 服务状态、验证账号权限。祝你连接成功! 🚀

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐