Mybatis-Plus与Mybatis对决:为何Plus版本更胜一筹?


mybatis-plus-boot-starter-3.5.3.1.jar
摘要
Mybatis与Mybatis-Plus是当前流行的Java持久层框架,它们在企业级应用开发中扮演着关键角色。本文首先简要介绍了Mybatis与Mybatis-Plus的基本概念及其核心特性,重点分析了Mybatis-Plus在CRUD操作、代码生成以及分页处理等方面的扩展和优化。接着,本文对Mybatis的传统优势与局限性进行了比较,并探讨了Mybatis-Plus的增强功能以及在实际场景中选择的技术考量。此外,通过多个应用案例,深入探讨了Mybatis-Plus在不同开发场景下的应用实践,包括Web项目、微服务架构以及大型系统中的扩展和优化。最后,本文展望了Mybatis-Plus的未来发展方向和社区动态,强调了最佳实践分享在推动技术应用中的重要性。
关键字
Mybatis;Mybatis-Plus;CRUD扩展;代码生成器;分页插件;性能优化
参考资源链接:解决Mybatis-Plus Invalid bound statement 错误
1. Mybatis与Mybatis-Plus简介
1.1 Mybatis的基本认识
Mybatis是一个半自动化的持久层框架,它通过XML或注解的方式将对象与数据库表进行映射,使得Java代码中的对象操作变得简单。它支持定制化SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码以及手动设置参数和获取结果集。
1.2 Mybatis-Plus的由来与优势
Mybatis-Plus在Mybatis的基础上进行了增强,它不仅提供了CRUD操作的简便实现,还引入了代码生成器、分页插件等便利功能,大大简化了开发工作,提高了开发效率。它能够自动识别数据库表结构的变化,并且能够根据实体类的字段自动生成相应的SQL语句。
1.3 Mybatis与Mybatis-Plus的选择考量
对于需要进行复杂SQL操作和对性能有极致追求的场景,Mybatis提供了更大的灵活性。而Mybatis-Plus则在易用性和开发效率上有明显的优势,适合大多数的业务开发场景,特别是在团队协作和项目快速迭代的环境下,Mybatis-Plus能够帮助开发人员减少配置和重复代码的编写工作,从而将更多精力集中在业务逻辑上。
2. Mybatis-Plus的核心特性分析
2.1 Mybatis-Plus的CRUD扩展
Mybatis-Plus是对Mybatis框架的增强,它在Mybatis的基础上增加了大量方便快捷的功能,其中最显著的就是CRUD操作的简化。
2.1.1 简化CRUD操作的实现
Mybatis-Plus通过提供一个通用的Mapper接口,使得开发者可以不用再编写那些繁琐的基本CRUD操作代码。Mybatis-Plus对这些操作进行了封装,因此只需引入Mybatis-Plus的依赖,并配置相应的数据源,即可使用这些预定义的CRUD方法。
- // 引入Mybatis-Plus依赖
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.x.x</version>
- </dependency>
- // 配置数据源
- @Configuration
- @MapperScan("com.example.mapper")
- public class MybatisPlusConfig {
- @Bean
- public PaginationInterceptor paginationInterceptor() {
- return new PaginationInterceptor();
- }
- }
@MapperScan
注解指定Mapper接口所在的包,PaginationInterceptor
是分页插件,将配置Mybatis-Plus核心功能的基础设置。
在实体类对应的Mapper接口中继承BaseMapper<T>
接口,即可实现大部分的CRUD操作:
- public interface UserMapper extends BaseMapper<User> {
- // 此接口提供了所有基本CRUD操作方法,无需手动实现
- }
2.1.2 自动填充和逻辑删除功能
自动填充功能允许开发者在插入或者更新记录时,自动填充一些字段。比如,在创建时间、更新时间、创建人ID等字段上,Mybatis-Plus可以通过注解@TableField
配合实现类自动填充这些字段。
- public class MyMetaObjectHandler implements MetaObjectHandler {
- @Override
- public void insertFill(MetaObject metaObject) {
- this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
- }
- @Override
- public void updateFill(MetaObject metaObject) {
- this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
- }
- }
逻辑删除功能则是在数据库中并不删除数据,而是在对应的字段上标记为已删除。在查询时,Mybatis-Plus会自动忽略这些标记为已删除的记录,从而实现“软删除”的效果。
- @TableName(value = "user", fill = FieldFill.INSERT_UPDATE)
- public class User {
- @TableLogic
- private Integer deleted;
- }
在application.yml
中配置逻辑删除的全局规则:
- mybatis-plus:
- global-config:
- db-config:
- logic-delete-field: deleted # 逻辑删除字段
- logic-delete-value: 1 # 删除的值
- logic-not-delete-value: 0 # 未删除的值
2.2 Mybatis-Plus的代码生成器
2.2.1 代码生成器的原理
Mybatis-Plus的代码生成器利用模板引擎,将模板文件与数据库表结构进行合并,生成相应的Mapper、Entity、Service和Controller等文件。开发人员通过简单的配置和几行代码,就能快速得到这些基础代码,从而大幅提高开发效率。
2.2.2 代码生成器的配置和使用
- // 配置代码生成器
- public class CodeGenerator {
- public static void main(String[] args) {
- // 1. 数据源配置
- DataSourceConfig dataSourceConfig = new DataSourceConfig();
- dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/db_example?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC");
- dataSourceConfig.setUsername("root");
- dataSourceConfig.setPassword("password");
- dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
- // 2. 策略配置
- StrategyConfig strategy = new StrategyConfig();
- strategy.setNaming(NamingStrategy.underline_to_camel);
- strategy.setColumnNaming(NamingStrategy.underline_to_camel);
- strategy.setInclude("user"); // 要生成的表名
- strategy.setEntityLombokModel(true);
- strategy.setRestControllerStyle(true);
- // 3. 全局配置
- GlobalConfig config = new GlobalConfig();
- config.setAuthor("Your Name");
- config.setOpen(false); // 是否打开输出目录
- // 4. 执行生成
- new.AUTOGenerator()
- .setGlobalConfig(config)
- .setDataSource(dataSourceConfig)
- .setStrategy(strategy)
- .setPackageInfo(
- new PackageConfig.Builder()
- .parent("com.example")
- .entity("entity")
- .mapper("mapper")
- .service("service")
- .controller("controller")
- .build()
- )
- .execute();
- }
- }
AUTOGenerator
是Mybatis-Plus提供的自动代码生成器,通过配置数据源、策略和全局设置,可以生成对应的代码结构。
2.3 Mybatis-Plus的分页插件
2.3.1 分页插件的使用和原理
Mybatis-Plus的分页插件非常易于使用,只需要配置相应的拦截器,就可以实现自动分页。
- // 分页插件配置
- @Bean
- public PaginationInterceptor paginationInterceptor() {
- return new PaginationInterceptor();
- }
在业务代码中,使用分页插件时,只需要调用page()
方法:
- Page<User> page = n
相关推荐







