详细介绍:Spring Boot 分模块:从数据库到前端接口
2025-11-16 16:04 tlnshuju 阅读(13) 评论(0) 收藏 举报目录
3.5.1 创建controller、service、mapper、domain包
3.5.5 编写 Mapper 接口 UserMapper.java
3.5.7 编写 Mapper XML 文件 UserMapper.xml
3.5.8 编写 Service 层 UserService.java
3.5.9 编写 Controller 层 HelloController.java
3.6.1 找到Spring Boot 启动类(MybatisApplication.java)
3.6.2 添加 @MapperScan 注解吧,编译代码、构建程序、执行SpringBoot程序
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 | 实体类(如 ✅ 作用:后续在 XML 中写 |
mapper-locations | MyBatis 的 XML 映射文件路径,classpath:mapper/*.xml 表示扫描 resources/mapper 目录下所有 .xml 文件 |
map-underscore-to-camel-case | 开启下划线转驼峰(例如数据库字段 create_time 自动对应 Java 实体类的 createTime 属性,无需手动配置 resultMap) |

# 服务器端口(可选,默认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)。
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)。
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 * FROM user;
3.5.8 编写 Service 层 UserService.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 getAllUsers() {
// 直接调用 Mapper 的方法(实际项目中可添加权限校验、数据过滤等逻辑)
return userMapper.selectAll();
}
}
3.5.9 编写 Controller 层 HelloController.java
作用:定义 HTTP 接口,接收前端请求并返回数据(此处用
@GetMapping定义 GET 接口)
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 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 | 无(数据载体) |
浙公网安备 33010602011771号