MyBatis Plus高效开发指南

MyBatis Plus高效开发指南

1. MyBatis Plus核心优势

  • 无侵入性:只做增强不做改变
  • 强大CRUD:内置通用Mapper/Service
  • Lambda表达式:类型安全的查询条件
  • 自动分页:无需手动处理分页逻辑
  • 代码生成:一键生成各层代码

2. 快速集成Spring Boot

依赖配置:

xml 复制代码
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.5.3.1</version>
</dependency>

实体类注解:

java 复制代码
@Data
@TableName("sys_user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    
    @TableField("user_name")
    private String name;
    
    private Integer age;
    
    @TableField(exist = false)
    private String tempField;
}

3. 核心功能实战

条件构造器使用:

java 复制代码
// 查询年龄大于25且名字包含"张"的用户
List<User> users = userMapper.selectList(
    new QueryWrapper<User>()
        .gt("age", 25)
        .like("name", "张")
        .orderByDesc("create_time")
);

// Lambda方式(类型安全)
List<User> users = userMapper.selectList(
    Wrappers.<User>lambdaQuery()
        .gt(User::getAge, 25)
        .like(User::getName, "张")
);

ActiveRecord模式:

java 复制代码
User user = new User();
user.setName("test");
user.setAge(30);
user.insert();  // 直接插入

user.setAge(35);
user.updateById(); // 更新操作

4. 高级特性应用

分页插件配置:

java 复制代码
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor paginationInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

// 使用示例
Page<User> page = new Page<>(1, 10);
Page<User> result = userMapper.selectPage(page, null);

自动填充功能:

java 复制代码
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

// 实现MetaObjectHandler
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
    }
    
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
    }
}

5. 代码生成器实战

java 复制代码
FastAutoGenerator.create(url, username, password)
    .globalConfig(builder -> builder
        .author("baomidou")
        .outputDir("D://generator"))
    .packageConfig(builder -> builder
        .parent("com.example.mybatisplus")
        .moduleName("system"))
    .strategyConfig(builder -> builder
        .addInclude("user", "role") // 包含的表
        .entityBuilder()
        .enableLombok()
        .controllerBuilder()
        .enableRestStyle())
    .templateEngine(new FreemarkerTemplateEngine())
    .execute();

适用场景建议:

  • 常规CRUD:使用BaseMapper/IService
  • 复杂查询:Wrapper条件构造器
  • 多表关联:自定义XML/SQL
  • 快速开发:代码生成器+ActiveRecord模式

技术选型总结

  • 传统项目/复杂SQL:选择原生MyBatis
  • 快速开发/标准CRUD:选择MyBatis Plus
  • 微服务架构:MyBatis Plus + Spring Cloud
  • 超高并发:MyBatis Plus + ShardingSphere
相关推荐
冷雨夜中漫步8 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴8 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再9 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
m0_7369191010 小时前
C++代码风格检查工具
开发语言·c++·算法
喵手10 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
2501_9449347310 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy10 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
黎雁·泠崖11 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_7634724612 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
肖永威12 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos