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
相关推荐
Yweir1 小时前
Elastic Search 8.x 分片和常见性能优化
java·python·elasticsearch
设计师小聂!1 小时前
尚庭公寓--------登陆流程介绍以及功能代码
java·spring boot·maven·mybatis·idea
耳总是一颗苹果1 小时前
C语言---动态内存管理
c语言·开发语言
手眼通天王水水1 小时前
【Linux】3. Shell语言
linux·运维·服务器·开发语言
小蜗牛狂飙记1 小时前
在github上传python项目,然后在另外一台电脑下载下来后如何保障成功运行
开发语言·python·github
小苏兮1 小时前
【C语言】字符串与字符函数详解(上)
c语言·开发语言·算法
倔强青铜三2 小时前
苦练Python第27天:嵌套数据结构
人工智能·python·面试
倔强青铜三2 小时前
苦练Python第26天:精通字典8大必杀技
人工智能·python·面试
程序员JerrySUN2 小时前
Valgrind Memcheck 全解析教程:6个程序说明基础内存错误
android·java·linux·运维·开发语言·学习
不愧是你呀3 小时前
Muduo库中单例模式详解
开发语言·c++·单例模式