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后加上这个字段

相关推荐
6***v4178 分钟前
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
开发语言·后端·golang
水痕0110 分钟前
go使用cobra来启动项目
开发语言·后端·golang
用户3458482850514 分钟前
python在使用synchronized关键字时,需要注意哪些细节问题?
后端
Peter_Monster15 分钟前
大语言模型(LLM)架构核心解析(干货篇)
人工智能·语言模型·架构
代码扳手17 分钟前
Golang 高效内网文件传输实战:零拷贝、断点续传与 Protobuf 指令解析(含完整源码)
后端·go
雨中飘荡的记忆22 分钟前
深入理解设计模式之单例模式
java·设计模式
银河邮差23 分钟前
python实战-用海外代理IP抓LinkedIn热门岗位数据
后端·python
undsky25 分钟前
【RuoYi-Eggjs】:让 MySQL 更简单
后端·node.js
程序员西西30 分钟前
Spring Boot整合MyBatis调用存储过程?
java·后端
f***019331 分钟前
【MySQL】JDBC的连接
数据库·mysql