MyBatis-Plus 完整教程(入门到实战)

一、MyBatis-Plus 简介

MyBatis-Plus(简称 MP) 是在 MyBatis 基础上增强的一个开源框架,目标是 简化开发,提高效率

官方口号:

只做增强,不做改变。

也就是说:

  • 不改变 MyBatis 的使用方式

  • 在其基础上 自动生成大量 CRUD 代码

  • 开发者 几乎不用写 SQL

官方组织:

MyBatis-Plus

官网:
https://baomidou.com


二、为什么使用 MyBatis-Plus

在使用原始 MyBatis 时,开发者通常需要:

  • 编写 Mapper 接口

  • 编写 XML SQL

  • 编写 CRUD 语句

  • 编写分页逻辑

例如一个简单查询:

sql 复制代码
select * from user where id = 1;

都需要写 XML。

MyBatis-Plus 已经帮我们实现好了。

例如:

java 复制代码
userMapper.selectById(1);

即可完成查询。

优点:

  1. 减少 SQL 编写

  2. 内置 CRUD

  3. 强大的条件构造器

  4. 自动分页

  5. 逻辑删除

  6. 代码生成器

  7. 性能分析插件


三、MyBatis-Plus 核心架构

MyBatis-Plus 的核心组件如下:

复制代码
Controller
    ↓
Service
    ↓
Mapper
    ↓
MyBatis-Plus
    ↓
Database

主要组件:

组件 作用
Entity 实体类
Mapper 数据库操作接口
Service 业务逻辑
Wrapper 条件构造器

四、MyBatis-Plus 快速入门

1 添加依赖

Maven 依赖:

XML 复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.5</version>
</dependency>

数据库驱动:

XML 复制代码
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>

2 创建数据库表

java 复制代码
CREATE TABLE user(
 id BIGINT PRIMARY KEY AUTO_INCREMENT,
 name VARCHAR(50),
 age INT,
 email VARCHAR(50)
);

3 创建实体类

java 复制代码
@Data
public class User {

    private Long id;

    private String name;

    private Integer age;

    private String email;

}

4 创建 Mapper

java 复制代码
@Mapper
public interface UserMapper extends BaseMapper<User> {

}

继承:

java 复制代码
BaseMapper<T>

即可拥有 所有 CRUD 方法


5 测试 CRUD

java 复制代码
@Autowired
private UserMapper userMapper;

查询

java 复制代码
User user = userMapper.selectById(1);

查询全部

java 复制代码
List<User> list = userMapper.selectList(null);

插入

java 复制代码
User user = new User();
user.setName("Tom");
user.setAge(20);

userMapper.insert(user);

更新

java 复制代码
User user = new User();
user.setId(1);
user.setName("Jerry");

userMapper.updateById(user);

删除

java 复制代码
userMapper.deleteById(1);

五、条件构造器(Wrapper)

MyBatis-Plus 提供 强大的条件构造器

复制代码
QueryWrapper
LambdaQueryWrapper
UpdateWrapper

推荐使用:

复制代码
LambdaQueryWrapper

优点:

  • 防止字段写错

  • 支持 lambda 表达式


查询示例

查询年龄大于18:

java 复制代码
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();

wrapper.gt(User::getAge,18);

List<User> list = userMapper.selectList(wrapper);

多条件查询

java 复制代码
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();

wrapper.like(User::getName,"Tom")
       .gt(User::getAge,18)
       .orderByDesc(User::getAge);

List<User> list = userMapper.selectList(wrapper);

生成 SQL:

sql 复制代码
select * from user
where name like '%Tom%'
and age > 18
order by age desc

六、分页插件

MyBatis-Plus 自带分页插件。

1 配置分页

java 复制代码
@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor interceptor(){

        MybatisPlusInterceptor interceptor =
                new MybatisPlusInterceptor();

        interceptor.addInnerInterceptor(
                new PaginationInnerInterceptor());

        return interceptor;
    }
}

2 分页查询

java 复制代码
Page<User> page = new Page<>(1,5);

Page<User> result = userMapper.selectPage(page,null);

参数:

复制代码
Page<>(当前页, 每页数量)

返回:

复制代码
分页数据

七、逻辑删除

逻辑删除:

复制代码
不删除数据
只修改状态

例如:

复制代码
deleted = 1

表结构

sql 复制代码
ALTER TABLE user ADD deleted INT DEFAULT 0;

实体类

java 复制代码
@TableLogic
private Integer deleted;

删除时:

java 复制代码
userMapper.deleteById(1);

实际 SQL:

sql 复制代码
UPDATE user SET deleted = 1 WHERE id = 1

查询时自动过滤:

java 复制代码
deleted = 0

八、自动填充字段

例如:

复制代码
create_time
update_time

实体类

java 复制代码
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;

自动填充处理器

java 复制代码
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {

        this.setFieldValByName(
                "createTime",
                LocalDateTime.now(),
                metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {

        this.setFieldValByName(
                "updateTime",
                LocalDateTime.now(),
                metaObject);
    }
}

九、代码生成器

MyBatis-Plus 可以 自动生成代码

生成:

复制代码
Entity
Mapper
Service
Controller

只需要输入:

复制代码
数据库地址
用户名
密码
表名

即可生成完整项目代码。

适合:

复制代码
快速开发后台系统

十、MyBatis vs MyBatis-Plus

对比 MyBatis MyBatis-Plus
SQL编写 手写SQL 大量自动生成
CRUD 自己写 自动生成
分页 自己写 内置
开发效率 较低 很高
学习成本 较高 较低

总结:

复制代码
MyBatis-Plus = MyBatis + CRUD增强

十一、MyBatis-Plus 面试常问问题

1 MyBatis-Plus 和 MyBatis 的关系

MyBatis-Plus 是:

复制代码
MyBatis 的增强工具

特点:

复制代码
只增强,不改变

2 BaseMapper 有哪些方法

常见方法:

java 复制代码
insert()
deleteById()
updateById()
selectById()
selectList()
selectPage()

3 Wrapper 是什么

Wrapper 是:

复制代码
SQL 条件构造器

用于动态构建 SQL。

常见:

复制代码
QueryWrapper
LambdaQueryWrapper
UpdateWrapper

4 MyBatis-Plus 如何实现分页

通过:

复制代码
PaginationInnerInterceptor

拦截 SQL 自动分页。


十二、总结

MyBatis-Plus 的核心优势:

  1. 减少 SQL 编写

  2. 内置 CRUD

  3. 强大的条件构造

  4. 自动分页

  5. 逻辑删除

  6. 代码生成器

开发效率可以提高 70% 以上

非常适合:

复制代码
Spring Boot + MyBatis-Plus
相关推荐
一只小bit3 小时前
JavaWeb 开发 —— 从 JDBC 到 Mybatis 数据库使用
数据库·maven·mybatis
云澜哥哥3 小时前
MyBatis 实战指南:特殊符号处理与高效批量操作
java·jvm·mybatis
小箌5 小时前
JavaWeb_02
java·数据库·maven·mybatis
wsxlgg18 小时前
mybatis自动生成mapper和xml文件
mybatis
杰克尼1 天前
苍穹外卖--day11
java·数据库·spring boot·mybatis·notepad++
飞天小猪啊1 天前
Mybatis
java·spring·mybatis
皙然1 天前
Mybatis面试题目
面试·tomcat·mybatis
java1234_小锋1 天前
Java高频面试题:MyBatis与JPA有哪些不同?
java·开发语言·mybatis·jpa
jinanmichael1 天前
Mybatis控制台打印SQL执行信息(执行方法、执行SQL、执行时间)
数据库·sql·mybatis