ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# MyBatis-Plus 常用功能一览表 **MyBatis-Plus是MyBatis的功能增强框架,在保留MyBatis所有能力的基础上,提供了更丰富的开箱即用功能和便捷的CRUD操作,显著减少了传统MyBatis的样板代码。** 以下是 MyBatis-Plus 在 Java 项目中的核心功能分类及说明: ## 📋 核心功能总览 | 功能模块 | 主要功能 | 作用说明 | 使用示例/注解 | |---------|---------|---------|-------------| | **核心增强** | 通用Mapper | 内置常用CRUD方法,无需编写XML | `BaseMapper<T>` | | | 通用Service | Service层快速开发接口 | `IService<T>`, `ServiceImpl` | | | 条件构造器 | 动态SQL条件构建 | `QueryWrapper`, `UpdateWrapper` | | **代码生成** | 代码生成器 | 自动生成Entity、Mapper、Service等 | `AutoGenerator` | | **CRUD扩展** | 主键生成策略 | 多种主键生成方式 | `@TableId(type = IdType.AUTO)` | | | 字段自动填充 | 自动填充创建/修改时间等字段 | `@TableField(fill = FieldFill.INSERT)` | | | 逻辑删除 | 软删除实现,数据不物理删除 | `@TableLogic` | | **查询增强** | 分页插件 | 物理分页支持 | `PaginationInterceptor`, `Page<T>` | | | 性能分析插件 | SQL执行性能分析 | `PerformanceInterceptor` | | | 乐观锁插件 | 数据版本控制,防并发冲突 | `@Version`, `OptimisticLockerInterceptor` | | **扩展插件** | 多租户插件 | SaaS系统数据隔离支持 | `TenantLineInnerInterceptor` | | | 动态表名插件 | 动态切换表名 | `DynamicTableNameInnerInterceptor` | | **其他特性** | 枚举处理 | 数据库字段与枚举自动映射 | `@EnumValue` | | | 序列化优化 | 自定义类型处理器 | `@TableField(typeHandler = ...)` | --- ## 🛠️ 详细功能说明 ### 1. **核心CRUD功能** | 功能 | 说明 | 代码示例 | |------|------|----------| | **通用Mapper** | 提供开箱即用的17个基础方法 | ```UserMapper extends BaseMapper<User>``` | | **条件构造器** | Lambda表达式构建查询条件 | ```wrapper.eq(User::getName, "张三").ge(User::getAge, 18)``` | | **ActiveRecord** | 实体类直接操作数据库(可选) | ```user.insert(); user.updateById();``` | ### 2. **代码生成器配置** ```java AutoGenerator mpg = new AutoGenerator(); // 全局配置 mpg.setGlobalConfig(globalConfig); // 数据源配置 mpg.setDataSource(dataSourceConfig); // 包配置 mpg.setPackageInfo(packageConfig); // 策略配置 mpg.setStrategy(strategyConfig); mpg.execute(); ``` ### 3. **常用注解详解** | 注解 | 作用 | 示例 | |------|------|------| | `@TableName` | 指定表名 | `@TableName("sys_user")` | | `@TableId` | 指定主键及策略 | `@TableId(type = IdType.ASSIGN_ID)` | | `@TableField` | 字段映射配置 | `@TableField(value = "email", fill = FieldFill.INSERT)` | | `@Version` | 乐观锁版本字段 | `@Version private Integer version;` | | `@TableLogic` | 逻辑删除标识 | `@TableLogic private Integer deleted;` | ### 4. **主键生成策略** | 策略类型 | 说明 | 适用场景 | |---------|------|----------| | `AUTO` | 数据库自增 | MySQL, PostgreSQL | | `NONE` | 无状态 | 手动赋值 | | `INPUT` | 用户输入 | 自定义ID | | `ASSIGN_ID` | MP分配ID(雪花算法) | 分布式系统 | | `ASSIGN_UUID` | 分配UUID | 需要UUID的场景 | ### 5. **插件配置示例** ```yaml # application.yml 配置示例 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # SQL日志 global-config: db-config: logic-delete-field: deleted # 全局逻辑删除字段 logic-delete-value: 1 # 删除值 logic-not-delete-value: 0 # 未删除值 ``` ### 6. **Wrapper条件构造示例** | 查询类型 | 示例代码 | |----------|----------| | **等值查询** | `wrapper.eq("name", "张三")` | | **范围查询** | `wrapper.between("age", 18, 30)` | | **模糊查询** | `wrapper.like("name", "张%")` | | **排序** | `wrapper.orderByDesc("create_time")` | | **子查询** | `wrapper.inSql("dept_id", "select id from dept where status=1")` | --- ## 📊 功能选择建议 | 项目类型 | 推荐功能 | |----------|----------| | **快速原型** | 代码生成器 + 通用Mapper + 基础CRUD | | **企业后台** | 分页插件 + 字段填充 + 逻辑删除 | | **SaaS系统** | 多租户插件 + 数据权限控制 | | **高并发** | 乐观锁插件 + 性能分析插件 | | **微服务** | 分布式ID + 枚举处理 + 序列化优化 | --- ## ⚡ 最佳实践提示 1. **性能考虑**:生产环境关闭性能分析插件 2. **安全考虑**:使用Lambda表达式防止SQL注入(`QueryWrapper<User>.lambda()`) 3. **版本兼容**:注意MyBatis-Plus与Spring Boot的版本匹配 4. **自定义扩展**:复杂SQL建议仍使用XML映射文件 5. **批量操作**:使用`Service`层的`saveBatch()`等方法优化批量操作 --- 通过合理使用MyBatis-Plus的这些功能,可以显著减少样板代码,提高开发效率,同时保持代码的清晰度和可维护性。根据项目实际需求选择合适的功能组合,避免过度依赖自动化工具而牺牲灵活性。