mybatis-plus 开发利器 ,再也不用写单表CRUD的重复代码了!
发布日期:2025-04-14 08:54:21 浏览次数:12 分类:精选文章

本文共 4864 字,大约阅读时间需要 16 分钟。

一、什么是 MyBatis-Plus?

MyBatis-Plus 是 MyBatis 的一个增强工具包,专注于在不改变 MyBatis 基础架构的前提下,提供更强大的功能。它的目标是简化 CRUD(增删改查)操作,同时保留 MyBatis 原生的所有特性。

MyBatis-Plus 的优势:

  • 无侵入性:MyBatis-Plus 在 MyBatis 的基础上扩展,不会对现有 MyBatis 架构造成任何影响,支持所有 MyBatis 原生特性。
  • 依赖少:仅依赖 MyBatis 及其核心插件 MyBatis-Spring。
  • 性能损耗小:启动时自动注入基本 CURD 功能,几乎无性能损耗。
  • 通用 CRUD 操作:内置通用 Mapper 和 Service,通过简单配置即可完成大部分 CRUD 操作。
  • 多种主键策略:支持多达4种主键生成方式,包括分布式唯一ID生成器。
  • 支持 ActiveRecord:实体类只需继承 Model 类即可实现基本 CRUD 操作。
  • 代码生成:支持通过代码或 Maven 插件快速生成 Mapper、Model、Service 和 Controller 层代码,功能强大。
  • 通用操作:支持自定义全局通用方法注入,可在需要的地方灵活使用。
  • 内置插件:包括分页、性能分析和全局拦截插件,提升开发体验。

  • 二、MyBatis-Plus 官网

    更多详细文档和使用指南可以参考 MyBatis-Plus 官网


    三、MyBatis-Plus 的 Wrapper 统一管理系统

    Wrapper 继承图

    Wrapper 是 MyBatis-Plus 中最顶端的抽象类,主要用于构造查询和更新条件。以下是其核心子类:

  • Wrapper:最顶端父类,提供4个核心方法(eqnegele 等)。
  • AbstractWrapper:用于封装查询条件,生成 SQL 的 WHERE 部分。
  • AbstractLambdaWrapper:处理 Lambda 语法,解析 Lambda 表达式获取字段。
  • LambdaQueryWrapper:专门用于 Lambda 语法的查询操作。
  • LambdaUpdateWrapper:用于 Lambda 语法的更新操作。
  • QueryWrapper:基于实体对象的封装操作,支持非 Lambda 语法。
  • UpdateWrapper:用于封装更新操作的条件。
  • Wrapper 的使用示例

    // 1. 非 Lambda 语法
    QueryWrapper
    queryWrapper = new QueryWrapper<>(userEntity);
    queryWrapper.eq("name", "张三");
    queryWrapper.ge("age", "18");
    ...
    // 2. Lambda 语法
    LambdaQueryWrapper
    lambdaQueryWrapper = new LambdaQueryWrapper<>(userEntity);
    lambdaQueryWrapper.eq(User::getName, "张三");
    lambdaQueryWrapper.ge(User::getAge, "18");
    // 3. 自定义封装
    lambdaQueryWrapper.eq(User.builder().getName("张三").getAge(18).build());

    Wrapper 的核心函数

    Wrapper 类及其子类提供了丰富的方法,用于构造查询和更新条件。以下是常用函数示例:

    • eq(String column, Object value):等于的条件构造。
    • ge(String column, Object value):大于等于的条件构造。
    • le(String column, Object value):小于等于的条件构造。
    • ne(String column, Object value):不等于的条件构造。
    • update():开启更新操作。
    • set(String column, Object value):设置更新字段。

    四、代码实战示例

    1. 项目依赖

    在 Spring Boot 项目中添加以下依赖:

    org.springframework.boot
    spring-boot-starter
    mysql
    mysql-connector-java
    runtime
    org.springframework.boot
    spring-boot-starter-test
    test
    org.junit.vintage
    junit-vintage-engine
    org.project.lombok
    lombok
    true
    com.baomidou
    mybatis-plus-boot-starter
    3.4.1

    2. 数据库配置

    application.properties 中添加以下配置:

    # 数据库配置
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/mybatis-plus?serverTimezone=UTC&characterEncoding=UTF-8
    spring.datasource.username=root
    spring.datasource.password=123456
    # MyBatis-Plus 配置
    mybatis-plus.mapper-locations=classpath*:/mappers/*.xml
    mybatis-plus.typeAliasesPackage=com.ratel.mp.entity
    # SQL 日志
    mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

    3. 代码结构

    package com.ratel.mp;
    import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
    import com.baomidou.mybatisplus.core.toolkit.Wrappers;
    import com.ratel.mp.entity.User;
    import com.ratel.mp.service.UserService;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import java.util.List;
    @SpringBootTest
    public class MpApplicationTests {
    @Autowired
    private UserService userService;
    @Test
    void queryTest() {
    // 1. 普通写法
    List
    userList = userService.list(Wrappers.
    (query().eq("id", 1)));
    // 2. Lambda 语法
    List
    list = userService.list(Wrappers.
    (lambdaQuery().eq(User::getId, 1)));
    // 3. 自定义 Lambda 构造
    List
    list2 = userService.list(Wrappers.
    (lambdaQuery(User.builder().getId(1).build()))); } @Test void saveTest() { boolean success = userService.save(User.builder().name("张三").age(18).email("zhangsan@qq.com").build()); System.out.println("保存结果:" + success); } @Test void updateTest() { User user = User.builder().name("张三").age(20).email("zhangsan@qq.com").build(); boolean success = userService.update(user, Wrappers.
    (update().eq("id", 13))); System.out.println("更新结果:" + success); } @Test void deleteTest() { boolean success = userService.removeById(14); System.out.println("删除结果:" + success); boolean success2 = userService.removeById(-1); System.out.println("删除不存在的数据结果:" + success2); } @Test void myGetByIdTest() { User user = userService.myGetById(1); System.out.println("获取单个用户结果:" + user); } }

    五、参考文章

  • MyBatis-Plus 官方文档
  • MyBatis-Plus GitHub 仓库
  • 上一篇:Mybatis-plus 实现多租户业务实战
    下一篇:Mybatis-Plus 开发提速器:mybatis-plus-generator-ui 你确定不了解一下?

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年05月20日 12时41分14秒