37. MyBatis-Plus是什么?它与MyBatis的主要区别是什么?

MyBatis-Plus(简称 MP)是 MyBatis 的增强版,是一个简单易用的持久层框架,旨在简化 MyBatis 的开发。它在保留 MyBatis 原有功能的基础上,提供了一系列增强功能,减少了重复代码,提高了开发效率。MyBatis-Plus 致力于在不改变 MyBatis 原有使用习惯和功能的情况下,提供更多开箱即用的功能,如 CRUD 接口、分页查询、代码生成器、条件构造器等。

MyBatis-Plus 与 MyBatis 的主要区别

1. 简化 CRUD 操作

  • MyBatis:需要开发者为每个实体编写基本的 CRUD(增、删、改、查)操作。虽然 MyBatis 提供了 XML 映射文件和注解来简化 SQL 语句的编写,但对于常见的 CRUD 操作,仍需要重复编写大量代码。

  • MyBatis-Plus :内置了通用的 CRUD 接口,开发者可以通过继承 BaseMapper 接口,自动获得常用的 CRUD 操作,无需手动编写对应的 SQL 语句。例如:

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

    这样,一个简单的接口 UserMapper 就具备了 insertdeleteupdateselectById 等基本的数据库操作方法。

2. 增强的分页功能

  • MyBatis:MyBatis 本身并不提供分页功能,需要开发者手动编写分页逻辑或使用第三方分页插件。

  • MyBatis-Plus:提供了内置的分页插件,开发者只需简单配置即可实现分页查询,并且分页插件支持多种数据库,无需关心数据库方言的问题。

    使用示例

    java 复制代码
    Page<User> page = new Page<>(1, 10); // 第1页,每页10条记录
    IPage<User> userPage = userMapper.selectPage(page, null);

    通过 selectPage 方法,可以轻松实现分页查询,并获取分页结果。

3. 条件构造器

  • MyBatis :在 MyBatis 中,编写条件查询通常需要在 XML 中通过 <if> 标签或者注解的方式动态拼接 SQL 语句,较为复杂。

  • MyBatis-Plus :提供了 QueryWrapperUpdateWrapperLambdaQueryWrapper 等条件构造器,允许开发者以更加流畅的方式构建查询条件,无需手动拼接 SQL。

    示例

    java 复制代码
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("name", "Alice").ge("age", 20);
    List<User> users = userMapper.selectList(queryWrapper);

    这种方式使得条件查询的编写更加简洁、清晰。

4. 代码生成器

  • MyBatis:MyBatis 本身不提供代码生成功能,开发者需要手动编写实体类、Mapper 接口及其 XML 映射文件。

  • MyBatis-Plus:提供了强大的代码生成器,可以根据数据库表结构自动生成实体类、Mapper 接口、Service 层代码以及对应的 XML 映射文件,大大提高开发效率。

    示例

    java 复制代码
    AutoGenerator autoGenerator = new AutoGenerator();
    // 配置数据源、包路径、策略等...
    autoGenerator.execute();

    使用代码生成器可以快速生成符合项目结构的代码,减少重复劳动。

5. 全局配置

  • MyBatis :MyBatis 的配置主要通过 mybatis-config.xml 或者在 Spring 中通过 Java 配置完成,配置较为灵活,但需要较多手动配置。

  • MyBatis-Plus:除了继承 MyBatis 的配置方式外,还提供了全局配置项(如逻辑删除、自动填充、乐观锁等),可以统一配置项目中的常见需求,减少手动配置的工作量。

    示例

    java 复制代码
    GlobalConfig globalConfig = new GlobalConfig();
    globalConfig.setDbConfig(new GlobalConfig.DbConfig().setLogicDeleteField("deleted"));

    通过全局配置,可以统一管理项目中的通用配置项。

6. 插件机制

  • MyBatis:MyBatis 提供了插件机制,可以拦截 SQL 语句的执行、结果集的处理等环节,开发者可以自定义插件来扩展 MyBatis 的功能。

  • MyBatis-Plus:MyBatis-Plus 继承了 MyBatis 的插件机制,并提供了更多内置插件,如分页插件、性能分析插件、SQL 执行分析插件等,使得扩展 MyBatis 的功能更加容易。

7. 总结

  • 简化开发:MyBatis-Plus 提供了内置的 CRUD 接口、条件构造器、分页插件等功能,大大简化了开发工作,减少了重复代码的编写。

  • 提高效率:通过代码生成器和全局配置,MyBatis-Plus 可以快速生成常见的代码结构,并统一管理配置,提升开发效率。

  • 增强功能:相比于 MyBatis,MyBatis-Plus 提供了更多的内置功能和插件,增强了框架的扩展性和易用性。

MyBatis-Plus 是对 MyBatis 的极大增强,适合希望在保持 MyBatis 原有灵活性的基础上,进一步简化开发流程的项目。它让开发者能够更加专注于业务逻辑的实现,而不必为基础的数据库操作编写大量重复的代码。

相关推荐
WaaTong19 分钟前
《重学Java设计模式》之 原型模式
java·设计模式·原型模式
m0_7430484419 分钟前
初识Java EE和Spring Boot
java·java-ee
AskHarries21 分钟前
Java字节码增强库ByteBuddy
java·后端
小灰灰__41 分钟前
IDEA加载通义灵码插件及使用指南
java·ide·intellij-idea
夜雨翦春韭44 分钟前
Java中的动态代理
java·开发语言·aop·动态代理
程序媛小果1 小时前
基于java+SpringBoot+Vue的宠物咖啡馆平台设计与实现
java·vue.js·spring boot
追风林1 小时前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac
芒果披萨1 小时前
El表达式和JSTL
java·el
duration~2 小时前
Maven随笔
java·maven
zmgst2 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql