定义:
MyBatis 是一个"半自动"的 ORM(对象关系映射)框架。
它的核心作用是:帮你把 Java 代码里的对象(Object)和数据库里的表(Table/SQL)连接起来。
如果没有 MyBatis,你需要手动写大量的 JDBC 代码来操作数据库;有了 MyBatis,你只需要写 SQL 语句和定义接口,剩下的脏活累活它帮你干。
MyBatis-Plus (简称 MP) 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
作用:
- 建立数据库连接
- 发送 SQL 给数据库
- 拿到结果集
- 自动把结果集里的字段映射成 Java 对象(User)
- 关闭连接
以下是基于 Spring Boot 整合 MyBatis-Plus 的详细步骤:
1. 引入依赖 (Maven)
在 pom.xml 中添加 MyBatis-Plus starter 依赖。
xml
<dependencies>
<!-- Spring Boot Web (可选,根据项目需求) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis-Plus Starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version> <!-- 建议使用最新稳定版 -->
</dependency>
<!-- 数据库驱动 (以 MySQL 为例) -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Lombok (可选,简化实体类代码) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2. 配置 application.yml
在 src/main/resources/application.yml 中配置数据源和 MP 的基本设置
xml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_plus_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: your_password
# MyBatis-Plus 配置
mybatis-plus:
# 配置 Mapper XML 文件的位置 (如果使用了 XML 方式)
mapper-locations: classpath*:/mapper/**/*.xml
# 配置类型别名包扫描 (可选,简化 XML 中的类型引用)
type-aliases-package: com.example.demo.entity
# 全局配置
global-config:
db-config:
# 主键策略: ASSIGN_ID (雪花算法), AUTO (数据库自增), INPUT (手动输入)
id-type: ASSIGN_ID
# 逻辑删除字段名 (可选)
logic-delete-field: deleted
# 逻辑删除值: 1表示删除, 0表示未删除
logic-delete-value: 1
logic-not-delete-value: 0
# 开启控制台 SQL 打印 (开发环境推荐)
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 开启驼峰命名自动映射 (user_name -> userName)
map-underscore-to-camel-case: true
3. 创建实体类 (Entity)
使用注解将 Java 对象与数据库表映射。
java
package com.example.demo.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@TableName("user") // 指定对应的数据库表名
public class User implements Serializable {
@TableId(type = IdType.ASSIGN_ID) // 主键策略
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT) // 插入时自动填充
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) // 插入和更新时自动填充
private LocalDateTime updateTime;
@TableLogic // 逻辑删除注解
private Integer deleted;
}
4. 创建 Mapper 接口
继承 BaseMapper,即可获得通用的 CRUD 方法,无需编写 XML 或实现类。
java
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper // 或者在启动类上加 @MapperScan("com.example.demo.mapper")
public interface UserMapper extends BaseMapper<User> {
// 这里可以定义自定义的复杂查询方法
// 例如: List<User> selectUsersByCustomCondition(@Param("ew") Wrapper<User> queryWrapper);
}
完整项目结构,及代码示例
项目结构

各文件详细内容:
1.主入口文件:src/main/java/com/example/demo/DemoApplication.java
java
package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.demo.mapper") // 👈 扫描 Mapper 接口
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
2. 配置类(Configuration):src/main/java/com/example/demo/config/WebConfig.java
java
package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOriginPatterns("*") // ✅ 改用 allowedOriginPatterns,支持通配符 + 凭证
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.allowCredentials(true); // 允许携带 Cookie/Auth Header
}
}
3.控制层(Presentation Layer):src/main/java/com/example/demo/controller/UserController.java
java
package com.example.demo.controller;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
// 查询所有
@GetMapping
public List<User> getAll() {
return userService.getAllUsers();
}
// 根据 ID 查询
@GetMapping("/{id}")
public User getById(@PathVariable Long id) {
return userService.getUserById(id);
}
// 新增
@PostMapping
public String add(@RequestBody User user) {
userService.addUser(user);
return "User added successfully";
}
// 更新
@PutMapping
public String update(@RequestBody User user) {
userService.updateUser(user);
return "User updated successfully";
}
// 删除
@DeleteMapping("/{id}")
public String delete(@PathVariable Long id) {
userService.deleteUser(id);
return "User deleted successfully";
}
// 模糊查询
@GetMapping("/search")
public List<User> search(@RequestParam String name) {
return userService.searchUsersByName(name);
}
}
4. 实体类: src/main/java/com/example/demo/entity/User.java
java
package com.example.demo.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@TableName("user")
public class User implements Serializable {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
5.Mapper 接口:src/main/java/com/example/demo/mapper/UserMapper.java
java
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 继承 BaseMapper 后,无需写任何代码即可拥有 CRUD 方法
}
6.业务接口:src/main/java/com/example/demo/service/UserService.java
java
package com.example.demo.service;
import com.example.demo.entity.User;
import java.util.List;
public interface UserService {
List<User> getAllUsers();
User getUserById(Long id);
void addUser(User user);
void updateUser(User user);
void deleteUser(Long id);
List<User> searchUsersByName(String name);
}
7.业务实现类:src/main/java/com/example/demo/service/impl/UserServiceImpl.java
java
package com.example.demo.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> getAllUsers() {
return userMapper.selectList(null);
}
@Override
public User getUserById(Long id) {
return userMapper.selectById(id);
}
@Override
public void addUser(User user) {
userMapper.insert(user);
}
@Override
public void updateUser(User user) {
userMapper.updateById(user);
}
@Override
public void deleteUser(Long id) {
userMapper.deleteById(id);
}
@Override
public List<User> searchUsersByName(String name) {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.like(User::getName, name);
return userMapper.selectList(wrapper);
}
}
8.resources/application.properties ------ 配置文件
yaml
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# 注意:demo_db 数据库必须存在,否则启动后会报连接错误(但不是现在的 Bean 错误)
url: jdbc:mysql://localhost:3306/demo_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 你的个人密码 # 👈 确保这个密码是你本地 MySQL 的真实密码
sql:
init:
mode: never # 👈 这行很重要,保留它
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
global-config:
db-config:
id-type: auto
9.完整的pom.xml依赖文件 (非常重要)
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.12</version> <!-- ✅ 稳定版,避免兼容性问题 -->
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>MyBatis-Plus CRUD Demo</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<!-- ✅ 改为 3.5.7 或更高,这是支持 Spring Boot 3.2/3.3 的稳定版本 -->
<version>3.5.7</version>
</dependency>
<!-- MySQL Driver -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Lombok (简化实体类) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<optional>true</optional>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version>
<exclusions>
<!-- 1. 排除旧版的 mybatis-spring -->
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 2. 手动引入兼容 Spring Boot 3 的 mybatis-spring 3.0.3+ -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
请严格遵守上述依赖文件,不然可能会造成版本依赖问题
Spring JDBC 版本冲突,
MyBatis-Plus 版本不兼容,
MyBatis-Spring 核心依赖过旧等问题可以完美避开!!!!
经过修改的 pom.xml,请执行以下命令:
1.清理并重新构建:
bash
mvn clean install -U -DskipTests
2.验证依赖树:
bash
mvn dependency:tree -Dincludes=org.mybatis:mybatis-spring
正确输出:
text
[INFO] \- org.mybatis:mybatis-spring:jar:3.0.3:compile
3.运行:
bash
mvn spring-boot:run
最后打开浏览器访问http://localhost:8080
出现以下截图:

恭喜你!成功引入MyBatis-Plus
总结
MyBatis 就是让你能用 Java 对象的方式操作数据库,同时还能让你自己掌控 SQL 语句,从而保证性能的工具