Featured image of post 怎么用mysql

怎么用mysql

  1. MySQL 服务已安装并启动:推荐 MySQL 8.0(主流版本)或 5.7(兼容稳定)。

  2. 创建测试数据库

    :比如新建名为

    1
    
    demo_db
    

    的数据库(字符集建议

    1
    
    utf8mb4
    

    ,支持 emoji 等特殊字符):

    1
    
    CREATE DATABASE IF NOT EXISTS demo_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
  3. Spring Boot 项目已搭建:确保基础环境(JDK、Maven)正常。

二、核心步骤:Spring Boot 整合 MySQL

步骤 1:引入依赖(pom.xml)

Spring Boot 整合 MySQL 需引入JDBC 启动器MySQL 驱动,推荐搭配 MyBatis-Plus(简化数据库操作,新手友好),依赖如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!-- Spring Boot JDBC 核心依赖(包含连接池) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<!-- MySQL 驱动(适配 8.0+ 版本,自动适配 Spring Boot 版本) -->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

<!-- 可选:MyBatis-Plus 启动器(简化 CRUD,替代原生 MyBatis) -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.5</version> <!-- 选稳定版 -->
</dependency>

<!-- Lombok(简化实体类) -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

版本适配说明

  • 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(传统键值对)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/demo_db?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
spring.datasource.username=root  # 你的 MySQL 用户名
spring.datasource.password=123456  # 你的 MySQL 密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver  # MySQL 8.0+ 驱动类

# 可选:MyBatis-Plus 配置(引入 MyBatis-Plus 才需要)
mybatis-plus.mapper-locations=classpath:mapper/*.xml  # Mapper XML 文件路径
mybatis-plus.type-aliases-package=com.example.demo.entity  # 实体类包名
mybatis-plus.configuration.map-underscore-to-camel-case=true  # 下划线转驼峰(如 user_name → userName)

# 可选:连接池配置(HikariCP,Spring Boot 默认)
spring.datasource.hikari.maximum-pool-size=10  # 最大连接数
spring.datasource.hikari.minimum-idle=5       # 最小空闲连接数
spring.datasource.hikari.idle-timeout=300000  # 空闲连接超时时间(5分钟)
格式 2:application.yml(更简洁,推荐)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
spring:
  datasource:
    # 数据库连接 URL
    url: jdbc:mysql://localhost:3306/demo_db?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root  # 替换为你的 MySQL 用户名
    password: 123456  # 替换为你的 MySQL 密码
    driver-class-name: com.mysql.cj.jdbc.Driver
    # Hikari 连接池配置
    hikari:
      maximum-pool-size: 10
      minimum-idle: 5
      idle-timeout: 300000
# MyBatis-Plus 配置(可选)
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.example.demo.entity
  configuration:
    map-underscore-to-camel-case: true

关键配置说明

  1. 1
    
    spring.datasource.url
    

    核心参数:

    • localhost:3306:MySQL 地址和端口(默认 3306)。
    • demo_db:你创建的数据库名。
    • serverTimezone=Asia/Shanghai:解决时区报错(MySQL 8.0+ 必加)。
    • allowPublicKeyRetrieval=true:解决 MySQL 8.0 连接时的公钥检索报错。
    • useSSL=false:开发环境关闭 SSL,避免警告。
  2. 1
    
    driver-class-name
    

    • MySQL 8.0+:com.mysql.cj.jdbc.Driver(带 cj)。
    • MySQL 5.7:com.mysql.jdbc.Driver(无 cj,但 8.0 驱动也兼容)。
  3. 连接池:Spring Boot 默认使用 HikariCP(性能最优),无需额外引入依赖,配置参数即可。

步骤 3:创建数据库表(测试用)

在 MySQL 中执行以下 SQL,创建 user 表:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
USE demo_db;

CREATE TABLE IF NOT EXISTS `user` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_name` VARCHAR(50) NOT NULL COMMENT '用户名',
  `age` INT(11) DEFAULT NULL COMMENT '年龄',
  `email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

-- 插入测试数据
INSERT INTO `user` (`user_name`, `age`, `email`) VALUES ('张三', 20, 'zhangsan@demo.com'), ('李四', 25, 'lisi@demo.com');

步骤 4:编写实体类(Entity)

com.example.demo 下新建 entity 包,创建 User.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package com.example.demo.entity;

import lombok.Data;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

// Lombok 注解:自动生成 getter/setter/toString 等
@Data
// MyBatis-Plus 注解:指定对应数据库表名(若类名和表名一致可省略)
@TableName("user")
public class User {
    // 主键,自增
    @TableId(type = IdType.AUTO)
    private Long id;
    // 用户名(对应表中 user_name 字段,开启下划线转驼峰后自动映射)
    private String userName;
    private Integer age;
    private String email;
}

步骤 5:编写数据访问层(Mapper)

MyBatis-Plus 提供了 BaseMapper,无需手动写 SQL 即可实现基础 CRUD:

  1. 新建

    1
    
    mapper
    

    包,创建

    1
    
    UserMapper.java
    
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    package 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 后,自动拥有 selectListinsertupdatedelete 等方法,无需手动实现
    }
    
  2. (可选)在启动类上添加

    1
    
    @MapperScan
    

    ,批量扫描 Mapper 包(替代每个 Mapper 加

    1
    
    @Mapper
    

    ):

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    package 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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.example.demo.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;

@RestController
public class UserController {

    // 注入 UserMapper
    @Resource
    private UserMapper userMapper;

    // 查询所有用户
    @GetMapping("/users")
    public List<User> getAllUsers() {
        // BaseMapper 自带的 selectList 方法,参数为 null 表示查询所有
        return userMapper.selectList(null);
    }

    // 根据 ID 查询用户
    @GetMapping("/user/{id}")
    public User getUserById(@PathVariable Long id) {
        // 根据主键查询
        return userMapper.selectById(id);
    }

    // 根据用户名查询用户
    @GetMapping("/user/name/{name}")
    public List<User> getUserByName(@PathVariable String name) {
        // 构造查询条件(Lambda 方式,避免硬编码字段名)
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(User::getUserName, name);
        return userMapper.selectList(queryWrapper);
    }
}

三、启动测试

  1. 启动 Spring Boot 项目,确保控制台无数据库连接报错。

  2. 访问接口验证:

    • 查询所有用户:

      1
      
      http://localhost:8080/users
      

      输出(JSON 格式):

      1
      
      [{"id":1,"userName":"张三","age":20,"email":"zhangsan@demo.com"},{"id":2,"userName":"李四","age":25,"email":"lisi@demo.com"}]
      
    • 根据 ID 查询:

      1
      
      http://localhost:8080/user/1
      

      输出:

      1
      
      {"id":1,"userName":"张三","age":20,"email":"zhangsan@demo.com"}
      
    • 根据用户名模糊查询:

      1
      
      http://localhost:8080/user/name/张
      

      输出:

      1
      
      [{"id":1,"userName":"张三","age":20,"email":"zhangsan@demo.com"}]
      

四、常见问题及解决方案

问题 1:数据库连接失败(Access denied for user ‘root’@’localhost’)

  • 原因:用户名 / 密码错误,或 MySQL 权限不足。

  • 解决方案:

    1. 确认 application.properties 中的 username/password 与 MySQL 登录信息一致。

    2. 给 root 用户授权(解决远程连接 / 权限问题):

      1
      2
      
      ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
      FLUSH PRIVILEGES;
      

问题 2:Time zone issue(时区报错)

  • 原因:MySQL 8.0+ 默认时区与系统时区不一致。

  • 解决方案:

    1. URL 中添加 serverTimezone=Asia/Shanghai(必加)。

    2. 或修改 MySQL 全局时区:

      1
      
      SET 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 扫描路径错误。

  • 解决方案:

    1. UserMapper@Mapper 注解。
    2. 或在启动类上加 @MapperScan("com.example.demo.mapper"),确保路径正确。

总结

  1. 核心配置:引入 JDBC + MySQL 驱动 → 配置 application.yml 中的数据库连接信息(URL / 用户名 / 密码 / 驱动类)→ 配置 MyBatis-Plus 简化 CRUD。
  2. 关键注意:MySQL 8.0+ 需指定时区、公钥检索参数,驱动类用 com.mysql.cj.jdbc.Driver;连接池默认用 HikariCP,无需额外配置即可使用。
  3. 验证方式:编写简单查询接口,访问后能返回数据库数据,说明配置成功。
使用 Hugo 构建
主题 StackJimmy 设计