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
相关推荐
AAA小肥杨4 分钟前
基于k8s的Python的分布式深度学习训练平台搭建简单实践
人工智能·分布式·python·ai·kubernetes·gpu
LXS_35710 分钟前
Day 05 C++ 入门 之 指针
开发语言·c++·笔记·学习方法·改行学it
etsuyou2 小时前
js前端this指向规则
开发语言·前端·javascript
shizhenshide2 小时前
为什么有时候 reCAPTCHA 通过率偏低,常见原因有哪些
开发语言·php·验证码·captcha·recaptcha·ezcaptcha
lichong9512 小时前
Git 检出到HEAD 再修改提交commit 会消失解决方案
java·前端·git·python·github·大前端·大前端++
Tiny番茄2 小时前
31.下一个排列
数据结构·python·算法·leetcode
mit6.8242 小时前
[Agent可视化] 配置系统 | 实现AI模型切换 | 热重载机制 | fsnotify库(go)
开发语言·人工智能·golang
友友马2 小时前
『 QT 』QT控件属性全解析 (一)
开发语言·前端·qt
小白学大数据3 小时前
实战:Python爬虫如何模拟登录与维持会话状态
开发语言·爬虫·python
一念&3 小时前
每日一个C语言知识:C 结构体
c语言·开发语言