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 语句。例如:public interface UserMapper extends BaseMapper<User> { }
这样,一个简单的接口
UserMapper
就具备了insert
、delete
、update
、selectById
等基本的数据库操作方法。
2. 增强的分页功能
-
MyBatis:MyBatis 本身并不提供分页功能,需要开发者手动编写分页逻辑或使用第三方分页插件。
-
MyBatis-Plus:提供了内置的分页插件,开发者只需简单配置即可实现分页查询,并且分页插件支持多种数据库,无需关心数据库方言的问题。
使用示例:
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:提供了
QueryWrapper
、UpdateWrapper
、LambdaQueryWrapper
等条件构造器,允许开发者以更加流畅的方式构建查询条件,无需手动拼接 SQL。示例:
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 映射文件,大大提高开发效率。
示例:
AutoGenerator autoGenerator = new AutoGenerator(); // 配置数据源、包路径、策略等... autoGenerator.execute();
使用代码生成器可以快速生成符合项目结构的代码,减少重复劳动。
5. 全局配置
-
MyBatis:MyBatis 的配置主要通过
mybatis-config.xml
或者在 Spring 中通过 Java 配置完成,配置较为灵活,但需要较多手动配置。 -
MyBatis-Plus:除了继承 MyBatis 的配置方式外,还提供了全局配置项(如逻辑删除、自动填充、乐观锁等),可以统一配置项目中的常见需求,减少手动配置的工作量。
示例:
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 原有灵活性的基础上,进一步简化开发流程的项目。它让开发者能够更加专注于业务逻辑的实现,而不必为基础的数据库操作编写大量重复的代码。