MyBatis-Plus快速入门

MyBatis-Plus(MP)在 Spring Boot 3 项目中的完整使用教程,涵盖从依赖引入、配置、实体类、Mapper 编写到分页、条件构造器等核心功能,适用于 2026 年当前主流开发环境(Spring Boot 3 + Java 17/21 + Jakarta EE)


一、为什么用 MyBatis-Plus?

  • 无侵入:只增强 MyBatis,不改变其原有功能
  • CRUD 零 SQL:内置通用 Mapper,单表操作无需写 XML
  • 支持 Lambda 查询:类型安全,避免字符串硬编码
  • 分页插件:自动分页,兼容 Spring Boot 3
  • 代码生成器:一键生成 Entity/Mapper/Service/Controller

注意:Spring Boot 3 必须使用 mybatis-plus-spring-boot3-starter


二、添加依赖(Maven)

<!-- 父 POM 的 <properties> 中 -->
<properties>
    <mybatis-plus.version>3.5.7</mybatis-plus.version> <!-- 截至 2026 年 1 月最新 -->
</properties>

<!-- 子模块或主模块的 dependencies -->
<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- MyBatis-Plus for Spring Boot 3 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
        <version>${mybatis-plus.version}</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>
        <scope>provided</scope>
    </dependency>
</dependencies>

❌ 不要使用 mybatis-plus-boot-starter(那是给 Spring Boot 2 用的!)


三、配置文件(application.yml)

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印 SQL(开发用)
  global-config:
    db-config:
      id-type: auto # 主键自增
      table-prefix: tbl_ # 表前缀(可选)

四、编写实体类(Entity)

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

@Data
@TableName("user") // 指定表名
public class User {
    @TableId(type = IdType.AUTO) // 主键策略
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

@TableName:指定数据库表名
@TableId:标识主键字段
@TableField:用于字段与列名不一致时(如 nickNamenick_name


五、编写 Mapper 接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

@Mapper // 或在启动类加 @MapperScan("com.smart.mapper")
public interface UserMapper extends BaseMapper<User> {
    // 继承 BaseMapper 后,已拥有 insert/update/delete/selectById/selectList 等方法
}

无需写实现类!无需 XML!


六、基本 CRUD 示例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public void demo() {
        // 插入
        User user = new User();
        user.setName("张三");
        user.setAge(25);
        userMapper.insert(user); // 自动回填 id

        // 根据 ID 查询
        User dbUser = userMapper.selectById(1L);

        // 更新
        dbUser.setAge(26);
        userMapper.updateById(dbUser);

        // 删除
        userMapper.deleteById(1L);

        // 查询全部
        List<User> list = userMapper.selectList(null);
    }
}

七、条件查询(QueryWrapper / LambdaQueryWrapper)

方式1:QueryWrapper(字符串字段)

QueryWrapper<User> query = new QueryWrapper<>();
query.eq("age", 25)
     .like("name", "张")
     .orderByDesc("id");

List<User> users = userMapper.selectList(query);

方式2:LambdaQueryWrapper(类型安全,推荐

LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>();
query.eq(User::getAge, 25)
     .like(User::getName, "张")
     .orderByDesc(User::getId);

List<User> users = userMapper.selectList(query);

优势:编译时检查字段是否存在,避免拼写错误


八、分页查询(Spring Boot 3 兼容)

1. 配置分页插件

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

2. 使用分页

public IPage<User> getUserPage(int pageNum, int pageSize) {
    IPage<User> page = new Page<>(pageNum, pageSize);
    LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>();
    query.ge(User::getAge, 18);
    return userMapper.selectPage(page, query);
}

返回结果包含:

  • records: 当前页数据
  • total: 总记录数
  • pages: 总页数

九、自定义 SQL(需要复杂查询时)

1. 在 Mapper 中定义方法

public interface UserMapper extends BaseMapper<User> {
    @Select("SELECT * FROM user WHERE age > #{minAge}")
    List<User> selectByMinAge(@Param("minAge") int minAge);
}

2. 或使用 XML(推荐大型项目)

  • 创建 resources/mapper/UserMapper.xml
  • 配置扫描路径:
mybatis-plus:
  mapper-locations: classpath*:mapper/**/*.xml

十、代码生成器(快速开发)

添加依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.7</version>
</dependency>
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <scope>provided</scope>
</dependency>

运行生成代码(示例):

public class CodeGenerator {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://...", "root", "123456")
            .globalConfig(builder -> {
                builder.author("smart")
                       .outputDir(System.getProperty("user.dir") + "/src/main/java");
            })
            .packageConfig(builder -> {
                builder.parent("com.smart");
            })
            .strategyConfig(builder -> {
                builder.addInclude("user", "order"); // 表名
            })
            .execute();
    }
}

官方文档 & 资源


总结:MyBatis-Plus 核心优势

功能 说明
零 SQL 单表 CRUD 继承 BaseMapper 即可
Lambda 查询 类型安全,避免字符串错误
自动分页 配置插件后一行代码分页
代码生成 快速生成全套 CRUD 代码
兼容 Spring Boot 3 使用 mybatis-plus-spring-boot3-starter

建议:新项目直接用 MP,老项目逐步替换原生 MyBatis。

posted @ 2026-02-28 16:44  Star丶呢喃  阅读(2)  评论(0)    收藏  举报