目录
[2.1 工具清单:](#2.1 工具清单:)
[3.1 第一步:在IDEA中创建空项目编辑](#3.1 第一步:在IDEA中创建空项目编辑)
[3.2 新建项目子模块mybatis](#3.2 新建项目子模块mybatis)
[3.3 运行 mybatis模块的启动类,检查是否正常](#3.3 运行 mybatis模块的启动类,检查是否正常)
[3.4 Mysql数据库配置、添加数据](#3.4 Mysql数据库配置、添加数据)
[3.4.1 创建数据库连接](#3.4.1 创建数据库连接)
[3.4.2 创建mybatis数据库](#3.4.2 创建mybatis数据库)
[3.4.3 创建user表,添加表的属性字段](#3.4.3 创建user表,添加表的属性字段)
[3.4.4 添加数据](#3.4.4 添加数据)
[3.5 新建包,资源目录,编写代码](#3.5 新建包,资源目录,编写代码)
[3.5.1 创建controller、service、mapper、domain包](#3.5.1 创建controller、service、mapper、domain包)
[3.5.2 新建mapper资源目录](#3.5.2 新建mapper资源目录)
[3.5.3 编写代码 配置数据库连接和mybatis](#3.5.3 编写代码 配置数据库连接和mybatis)
[2. MyBatis配置(mybatis)](#2. MyBatis配置(mybatis))
[3.5.4 编写实体类 User.java(数据库表映射)](#3.5.4 编写实体类 User.java(数据库表映射))
[3.5.5 编写 Mapper 接口 UserMapper.java](#3.5.5 编写 Mapper 接口 UserMapper.java)
[3.5.7 编写 Mapper XML 文件 UserMapper.xml](#3.5.7 编写 Mapper XML 文件 UserMapper.xml)
[3.5.8 编写 Service 层 UserService.java](#3.5.8 编写 Service 层 UserService.java)
[3.5.9 编写 Controller 层 HelloController.java](#3.5.9 编写 Controller 层 HelloController.java)
[3.6 添加必要注解](#3.6 添加必要注解)
[3.6.1 找到Spring Boot 启动类(MybatisApplication.java)](#3.6.1 找到Spring Boot 启动类(MybatisApplication.java))
[3.6.2 添加 @MapperScan 注解吧,编译代码、构建程序、执行SpringBoot程序](#3.6.2 添加 @MapperScan 注解吧,编译代码、构建程序、执行SpringBoot程序)
[3.7 启动项目并测试](#3.7 启动项目并测试)
[3.8 总结](#3.8 总结)
1、引言:为什么要分模块开发?
新手开发常把所有代码堆在一起,导致后期维护困难。分模块开发 就像整理衣柜:把「衣服(代码)」按「上衣(实体)、裤子(接口)、袜子(工具)」分类存放,逻辑清晰、复用性高。本文以 「MyBatis读取数据库数据并返回给前端」
2、准备环境
2.1 工具清单:
- JDK:17(或8/11,推荐17)
- IDE:IntelliJ IDEA 2023(社区版免费)
- 数据库:MySQL 8.0
- 构建工具:Maven(IDEA自带)
- API测试:Postman(可选,浏览器也可)
3、创建SpringBoot项目的子模块
3.1 第一步:在IDEA中创建空项目

3.2 新建项目子模块mybatis


3.3 运行 mybatis模块的启动类,检查是否正常

3.4 Mysql数据库配置、添加数据
3.4.1 创建数据库连接

3.4.2 创建mybatis数据库

3.4.3 创建user表,添加表的属性字段

3.4.4 添加数据

3.5 新建包,资源目录,编写代码
3.5.1 创建controller、service、mapper、domain包

3.5.2 新建mapper资源目录



3.5.3 编写代码 配置数据库连接和mybatis
1、数据库连接配置(spring.datasource
)
配置项 | 说明 |
---|---|
driver-class-name |
MySQL 8.0+ 必须用 com.mysql.cj.jdbc.Driver |
url |
jdbc:mysql://localhost:3306/数据库名?参数 - localhost:3306 :本地MySQL地址和端口(默认3306) - mybatis :你的数据库名) - serverTimezone=Asia/Shanghai :时区必须设置(否则报错,用上海时区避免乱码) |
username/password |
你的MySQL登录信息( root /123456 ) |
2. MyBatis配置(mybatis
)
配置项 | 说明 |
---|---|
type-aliases-package |
实体类(如 User.java )所在的包路径,例如: 如果你 User.java 的包是 com.example.mybatis.domain ,则填 com.example.mybatis.domain ✅ 作用:后续在 XML 中写 resultType="User" 即可,无需写全类名 com.example.mybatis.domain.User |
mapper-locations |
MyBatis 的 XML 映射文件路径,classpath:mapper/*.xml 表示扫描 resources/mapper 目录下所有 .xml 文件 |
map-underscore-to-camel-case |
开启下划线转驼峰(例如数据库字段 create_time 自动对应 Java 实体类的 createTime 属性,无需手动配置 resultMap ) |

java
# 服务器端口(可选,默认8080,可省略)
server:
port: 8080
# 数据库连接配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver # MySQL驱动
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8 # 数据库URL
username: root
password: 123456
# MyBatis配置
mybatis:
type-aliases-package: org.example.mybatis.domain # 实体类所在包(User类的路径,根据你的包名调整!)
mapper-locations: classpath:mapper/*.xml # Mapper XML文件路径(resources/mapper下的所有.xml文件)
configuration:
map-underscore-to-camel-case: true # 自动将数据库下划线字段转为Java驼峰命名(如create_time → createTime)
3.5.4 编写实体类 User.java
(数据库表映射)
作用 :映射数据库
user
表,字段名与表字段一一对应(驼峰命名自动匹配下划线字段,如create_time
→createTime
)。
java
package com.example.mybatis.domain; // 包路径必须正确(根据你的项目调整!)
import java.time.LocalDateTime; // Java 8+ 日期类型,对应数据库 DATETIME
public class User {
// 字段名必须与数据库表字段一致(忽略大小写,但推荐小写开头+驼峰)
private Long id; // 主键(BIGINT → Long)
private String username; // 用户名(VARCHAR → String)
private String password; // 密码(VARCHAR → String)
private String email; // 邮箱(可为null,用String)
private Integer age; // 年龄(INT → Integer,可为null)
private LocalDateTime createTime; // 创建时间(DATETIME → LocalDateTime)
// Getter和Setter(必须!MyBatis通过getter/setter赋值,否则字段值为null)
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; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age; }
public LocalDateTime getCreateTime() { return createTime; }
public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
// 可选:重写toString(),方便打印对象信息(调试用)
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
", age=" + age +
", createTime=" + createTime +
'}';
}
}
3.5.5 编写 Mapper 接口 UserMapper.java
作用:定义数据库操作方法(如查询用户),由 MyBatis 自动生成实现类(通过 XML 文件或注解配置 SQL)。
java
package com.example.mybatis.mapper; // 包路径必须与启动类 @MapperScan 扫描的路径一致!
import com.example.mybatis.domain.User; // 导入实体类
import java.util.List; // 用于返回多个用户
// 无需添加 @Mapper 注解(因为启动类已用 @MapperScan("com.example.mybatis.mapper") 扫描该包)
public interface UserMapper {
// 查询所有用户(方法名必须与 UserMapper.xml 中的 <select id="selectAll"> 一致)
List<User> selectAll(); // 返回值为 List<User>,对应多条用户数据
}
3.5.7 编写 Mapper XML 文件 UserMapper.xml
作用 :配置 SQL 语句,与
UserMapper.java
接口的方法绑定(MyBatis 的核心配置)。
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:必须是 Mapper 接口的全类名(包名+类名),否则无法绑定 -->
<mapper namespace="com.example.mybatis.mapper.UserMapper">
<!-- 查询所有用户:id=接口中的方法名,resultType=返回的实体类全类名(或别名) -->
<!-- 由于 application.yml 中配置了 mybatis.type-aliases-package=com.example.mybatis.domain,因此这里可以直接写实体类名 "User"(无需全类名) -->
<select id="selectAll" resultType="User">
<!-- SQL语句:查询 user 表所有字段 -->
SELECT * FROM user;
</select>
</mapper>
3.5.8 编写 Service 层 UserService.java
作用:处理业务逻辑
java
package com.example.mybatis.service;
import com.example.mybatis.domain.User;
import com.example.mybatis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service // 标记为 Service 层组件,由 Spring 管理
public class UserService {
// 注入 UserMapper(MyBatis 动态代理生成的实现类)
@Autowired // 自动装配,依赖启动类 @MapperScan 扫描到 UserMapper
private UserMapper userMapper;
// 业务方法:获取所有用户
public List<User> getAllUsers() {
// 直接调用 Mapper 的方法(实际项目中可添加权限校验、数据过滤等逻辑)
return userMapper.selectAll();
}
}
3.5.9 编写 Controller 层 HelloController.java
作用 :定义 HTTP 接口,接收前端请求并返回数据(此处用
@GetMapping
定义 GET 接口)
java
package com.example.mybatis.controller;
import com.example.mybatis.domain.User;
import com.example.mybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController // 组合注解:@Controller + @ResponseBody(返回 JSON 数据,无需视图)
public class HelloController {
// 注入 Service 层对象
@Autowired
private UserService userService;
// 定义 GET 接口:http://localhost:8080/hello
@GetMapping("/hello") // 接口路径,前端通过该路径访问
public List<User> hello() {
// 调用 Service 层方法获取所有用户,返回给前端(自动转为 JSON)
return userService.getAllUsers();
}
}
3.6 添加必要注解
3.6.1 找到Spring Boot 启动类(MybatisApplication.java
)
3.6.2 添加 @MapperScan
注解吧,编译代码、构建程序、执行SpringBoot程序
- 作用 :告诉 Spring 去哪里扫描 MyBatis 的 Mapper 接口(如
UserMapper.java
),并自动创建实现类(由 MyBatis 动态代理生成),放入 Spring 容器中,后续@Autowired
才能注入成功。- 扫描路径 :必须是 Mapper 接口所在的包路径

3.7 启动项目并测试

3.8 总结

- 数据库表设计 - Spring Boot 分层编码 - 接口测试与验证
--分层架构(Controller → Service → Mapper)
- Controller层 - 作用:接收HTTP请求,返回响应
-- 核心注解:@RestController、@GetMapping
-- 示例:UserController.getAllUsers()
-- Service层 - 作用:处理业务逻辑,调用Mapper
-- 核心注解:@Service、@Autowired
-- 结构:接口(UserService)+ 实现类(UserServiceImpl)
-- Mapper层 - 作用:定义数据库操作接口
-- 核心注解:@Mapper(接口)
-- 映射文件:UserMapper.xml(编写SQL)
--MyBatis映射关系(接口 → XML → 数据库表)
- UserMapper接口 - 方法:selectAll()(对应SQL查询
- UserMapper.xml - namespace:绑定接口全类名
-- select标签:id=方法名,resultType=返回实体类
-- SQL语句:SELECT * FROM user
-- 数据库表(user)
-- 字段与实体类User属性一一映射(如id → id,username → username)
分层 | 核心注解 | 作用 | 依赖注入目标 |
---|---|---|---|
Controller | @RestController |
标记为控制器,返回 JSON | Service 接口 |
Service | @Service |
标记为业务层组件,处理逻辑 | Mapper 接口 |
Mapper | @Mapper |
标记为 MyBatis 映射接口,操作数据库 | 无(被 Service 依赖) |
Domain | @Data (Lombok) |
简化实体类代码,自动生成 getter/setter | 无(数据载体) |