MyBatis(数据持久层,❗ “接口 = SQL执行器”)

一、先给结论(MyBatis 是什么)

❗ MyBatis = Java 方法 ↔ SQL 的映射框架

核心------❗ "接口 = SQL执行器"


二、你现在的问题(没有 MyBatis 之前)

你现在如果要查用户:

复制代码
JDBC写法:
1. 获取连接
2. 写SQL
3. 执行
4. 解析结果

代码非常繁琐。


三、MyBatis 做了什么?

它帮你做三件事:

复制代码
1. 管理 SQL
2. 把 SQL 映射成 Java 方法
3. 自动把结果转成对象

五、最小MyBatis结构

在 Spring Boot 中:

复制代码
Controller
  ↓
Service
  ↓
Mapper(MyBatis)
  ↓
SQL
  ↓
MySQL

六、开始接入 MyBatis(一步一步)


Step 1:添加依赖(minishop-user)

在:minishop-user/pom.xml

加入:

XML 复制代码
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>

Step 2:配置数据库连接

在:

复制代码
src/main/resources/application.yml

创建:

XML 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/minishop?useSSL=false&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

Step 3:创建数据库表(用户表)

sql 复制代码
# 登录 000000

MySQL mysql -u root -p

# 创建数据库

CREATE DATABASE minishop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 退出

exit;

#Mac禁用了 mysql_native_password
# 方案1------行不通,密码没错
ALTER USER 'root'@'localhost'
IDENTIFIED WITH caching_sha2_password BY '你的密码';

FLUSH PRIVILEGES;
#方案 2(企业推荐):新建开发用户(最稳定)

#避免 root 认证问题:

CREATE USER 'dev'@'localhost' IDENTIFIED BY 'dev123';

GRANT ALL PRIVILEGES ON minishop.* TO 'dev'@'localhost';

FLUSH PRIVILEGES;
sql 复制代码
CREATE TABLE user (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50),
    password VARCHAR(100)
);

Step 4:创建实体(domain)

复制代码
com.minishop.user.domain
java 复制代码
package com.minishop.user.domain;

public class User {

    private Long id;
    private String username;
    private String password;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

Step 5:创建 Mapper(核心)

复制代码
com.minishop.user.mapper
java 复制代码
package com.minishop.user.mapper;

import com.minishop.user.domain.User;
import org.apache.ibatis.annotations.*;

@Mapper
public interface UserMapper {

    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectById(Long id);

    @Insert("INSERT INTO user(username,password) VALUES(#{username},#{password})")
    void insert(User user);
}

Step 6:Service 调用 Mapper

java 复制代码
package com.minishop.user.service;

import com.minishop.user.domain.User;
import com.minishop.user.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User getUser(Long id) {
        return userMapper.selectById(id);
    }
}

Step 7:Controller 调用 Service

java 复制代码
package com.minishop.user.controller;

import com.minishop.common.result.Result;
import com.minishop.user.domain.User;
import com.minishop.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public Result<User> getUser(@PathVariable Long id) {
        return Result.success(userService.getUser(id));
    }
}

七、MyBatis 本质(非常重要)


1️⃣ Mapper 是什么?

复制代码
接口 ≠ 普通接口

👉 MyBatis 会帮你生成实现类:

复制代码
UserMapperProxy(动态代理)

2️⃣ SQL在哪里执行?

复制代码
Mapper方法 → SQL → JDBC → MySQL

3️⃣ 为什么不用写实现类?

因为:

MyBatis 用动态代理自动生成


八、MyBatis 执行流程(核心链路)

复制代码
UserMapper.selectById()
   ↓
MapperProxy(代理)
   ↓
SQL解析
   ↓
JDBC执行
   ↓
ResultSet
   ↓
对象映射(User)

九、MyBatis vs JDBC(本质区别)

JDBC MyBatis
手写SQL流程 自动映射
手动解析ResultSet 自动转对象
代码冗余 接口化
相关推荐
代码不停3 小时前
MyBatis进阶
spring boot·mybatis
captain37613 小时前
MyBatis(入门5)其他查询操作
java·数据库·spring boot·mybatis
captain37615 小时前
MyBatis(进阶1)
mybatis
郭小李1 天前
mybatis的 Mapper.xml语法
xml·java·mybatis
m0_639906941 天前
MyBatis 实现分页查询|逻辑分页、物理分页、PageHelper 原理
mybatis
captain3762 天前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
正儿八经的少年3 天前
MyBatis 一对一、一对多 SQL
数据库·sql·mybatis
paopaokaka_luck4 天前
社区服务平台(加权协同过滤推荐、Jieba中文词频分析、WebSocket实时聊天、求助处理闭环、 活动积分闭环、ECharts多维分析)
java·前端·spring boot·mysql·echarts·mybatis
代码不停5 天前
MyBatis操作数据库
数据库·mybatis
wno7045 天前
Spring Boot中JdbcTemplate与Mybatis使用PostgreSQL
spring boot·postgresql·mybatis