MyBatis - Plus学习笔记

一. 快速入门

1. 使用步骤

1. 添加依赖

XML 复制代码
<!-- MyBatis-Plus 核心依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version> <!-- 最新版本可到官网查询 -->
</dependency>
<!-- 数据库驱动(根据实际数据库选择) -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

2. 配置数据库连接

java 复制代码
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=UTC
    username: root
    password: your_password
# MyBatis-Plus 配置(可选)
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml # Mapper XML 路径
  type-aliases-package: com.example.entity # 实体类包路径

3. 启动类添加注解

java 复制代码
@SpringBootApplication
@MapperScan("com.example.mapper") // 扫描 Mapper 接口包
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

2. 常用注解

3. 常见配置

二. 核心功能

1. 条件构造器

案例:

2. 自定义SQL

3. Service接口

三. 扩展功能

1. 代码生成器

MyBatis-Plus 的代码生成器(Generator)是一个高效的代码自动生成工具,能根据数据库表结构快速生成 实体类(Entity)、Mapper 接口、Service 层、Controller 层 等代码,甚至包括基础的 CRUD 方法和 XML 映射文件,极大减少重复编码工作,尤其适合快速开发和标准化项目结构。

1.1 核心功能

  1. 多数据源支持:适配 MySQL、Oracle、SQL Server 等主流数据库。
  2. 自定义模板:支持 Freemarker、Velocity、Beetl 等模板引擎,可自定义代码生成规则(如类名格式、方法注释等)。
  3. 分层生成:自动生成 Entity、Mapper、Service(接口 + 实现类)、Controller 等分层代码。
  4. 关联生成 :根据表字段自动生成实体类的注解(如 @TableName@TableId)、字段映射关系,以及 Mapper XML 中的基础 SQL。
  5. 配置灵活:可指定生成目录、过滤不需要的表、设置命名策略(如驼峰命名)等。

1.2 使用步骤(以 Spring Boot + MySQL 为例)

(1)添加依赖

pom.xml 中引入代码生成器和模板引擎(以 Freemarker 为例):

XML 复制代码
<!-- MyBatis-Plus 代码生成器 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.3.1</version> <!-- 与 MyBatis-Plus 版本保持一致 -->
</dependency>
<!-- 模板引擎(必须引入,否则无法生成代码) -->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.31</version>
</dependency>

(2)编写生成代码

创建一个 CodeGenerator 类,配置生成规则并执行:

java 复制代码
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;

public class CodeGenerator {
    public static void main(String[] args) {
        // 1. 配置数据库连接
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=UTC", "root", "your_password")
                // 2. 全局配置
                .globalConfig(builder -> {
                    builder.author("your_name") // 设置作者
                            .outputDir(System.getProperty("user.dir") + "/src/main/java") // 生成文件输出目录(项目的 src/main/java)
                            .commentDate("yyyy-MM-dd") // 注释日期格式
                            .disableOpenDir(); // 生成后不自动打开文件夹
                })
                // 3. 包配置(指定各层代码的包路径)
                .packageConfig(builder -> {
                    builder.parent("com.example.demo") // 父包名
                            .moduleName("user") // 模块名(可选,如多模块项目)
                            .entity("entity") // 实体类包名
                            .mapper("mapper") // Mapper 接口包名
                            .service("service") // Service 接口包名
                            .serviceImpl("service.impl") // Service 实现类包名
                            .controller("controller") // Controller 包名
                            .xml("mapper.xml") // Mapper XML 存放目录(默认 resources/mapper/xml)
                            .pathInfo(Collections.singletonMap(OutputFile.xml, 
                                    System.getProperty("user.dir") + "/src/main/resources/mapper")); // XML 输出路径
                })
                // 4. 策略配置(表和字段的生成规则)
                .strategyConfig(builder -> {
                    builder.addInclude("user") // 指定要生成的表名(多表用逗号分隔)
                            .addTablePrefix("t_", "sys_") // 过滤表前缀(如 t_user 生成 User 实体)
                            // 实体类策略
                            .entityBuilder()
                            .enableLombok() // 开启 Lombok 注解(@Data 等)
                            .enableTableFieldAnnotation() // 为字段添加 @TableField 注解
                            .idType(com.baomidou.mybatisplus.generator.config.rules.IdType.AUTO) // 主键策略(自增)
                            // Mapper 策略
                            .mapperBuilder()
                            .enableBaseResultMap() // 生成基本的 ResultMap
                            .enableBaseColumnList() // 生成基本的 ColumnList
                            // Service 策略
                            .serviceBuilder()
                            .formatServiceFileName("%sService") // Service 接口名格式(如 UserService)
                            .formatServiceImplFileName("%sServiceImpl") // Service 实现类名格式
                            // Controller 策略
                            .controllerBuilder()
                            .enableRestStyle(); // 开启 RESTful 风格(生成 @RestController)
                })
                // 5. 模板引擎配置(使用 Freemarker)
                .templateEngine(new FreemarkerTemplateEngine())
                // 6. 执行生成
                .execute();
    }
}

生成代码后,需手动在启动类添加 @MapperScan("com.example.demo.mapper") 扫描 Mapper 接口。

(3)关键配置说明

配置项 作用
数据库连接 通过 create() 方法指定 URL、用户名、密码,用于读取表结构。
全局配置 作者、输出目录、注释格式等,outputDir 需指向项目的 src/main/java
包配置 定义各层代码的包路径(如实体类放 entity 包),XML 建议放 resources/mapper
策略配置 - addInclude:指定生成的表名(必选);- addTablePrefix:过滤表前缀(如 t_user 生成 User);- 实体类:开启 Lombok、主键策略等;- Controller:开启 REST 风格(生成 @RestController)。
模板引擎 选择 Freemarker 或其他引擎,需与依赖对应。

(4)生成结果

执行 CodeGenerator.main() 后,会在指定目录生成以下文件:

perl 复制代码
src/main/java/com/example/demo/user/
├─ entity/User.java                // 实体类(带 Lombok 和 MyBatis-Plus 注解)
├─ mapper/UserMapper.java          // Mapper 接口(继承 BaseMapper)
├─ service/UserService.java        // Service 接口(继承 IService)
├─ service/impl/UserServiceImpl.java // Service 实现类(继承 ServiceImpl)
└─ controller/UserController.java  // Controller 类(REST 风格)

src/main/resources/mapper/
└─ UserMapper.xml                  // Mapper XML(基础 CRUD 语句)

1.3 更多用法

(1)自定义模板:如果默认生成的代码不符合需求,可复制 MyBatis-Plus 的默认模板(参考官方模板)到项目的 src/main/resources/templates 目录,修改后通过 templateConfig 指定自定义模板路径。

(2)过滤字段或表

忽略某些表:strategyConfig.builder().addExclude("table_name")

忽略某些字段:entityBuilder().addIgnoreColumns("column_name")

(3)批量生成多张表:在 addInclude 中传入多个表名,如 addInclude("user", "order", "product")

2. 分页插件

简单使用

3. 逻辑删除

有了删除逻辑字段后,每次的更新或查询都要在where后加上这个字段

相关推荐
间彧2 小时前
如何设计异常分级策略,对不同级别异常(如业务异常、系统异常)采取不同的告警方式?
后端
HSJ01702 小时前
Aviator中使用BigDecimal进行高精度计算
java·开发语言·bigdecimal·aviator
间彧2 小时前
Micrometer详解与应用实战
后端
刘一说2 小时前
深入理解 Spring Boot 中的 Redis 缓存集成:从基础配置到高可用实践
spring boot·redis·缓存
weixin_307779132 小时前
利用 AWS Lambda 与 EventBridge 优化低频 Java 作业的云计算成本
java·开发语言·云原生·云计算·aws
猫林老师2 小时前
Flutter for HarmonyOS开发指南(二):混合开发架构与通信机制
flutter·架构·harmonyos
间彧2 小时前
SpringBoot/SpringCloud,如何实现监控埋点
后端
一缕南风2 小时前
Spring Boot 响应拦截器(Jackson)实现时间戳自动添加
java·spring boot·后端·拦截器
期待のcode2 小时前
Docker容器
java·docker·容器