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
相关推荐
李剑一11 小时前
Python学习笔记2
python
FakeOccupational11 小时前
电路笔记(信号):网线能传多少米?网线信号传输距离
开发语言·笔记·php
李宥小哥11 小时前
Redis10-原理-网络模型
开发语言·网络·php
利刃大大11 小时前
【c++中间件】语音识别SDK && 二次封装
开发语言·c++·中间件·语音识别
晨非辰12 小时前
C++ 波澜壮阔 40 年:从基础I/O到函数重载与引用的完整构建
运维·c++·人工智能·后端·python·深度学习·c++40周年
有梦想的西瓜12 小时前
如何优化电力系统潮流分布:最优潮流(OPF)问题
python·电力·opf
同学小张17 小时前
【端侧AI 与 C++】1. llama.cpp源码编译与本地运行
开发语言·c++·aigc·llama·agi·ai-native
DanCheng-studio17 小时前
网安毕业设计简单的方向答疑
python·毕业设计·毕设
踢球的打工仔18 小时前
PHP面向对象(7)
android·开发语言·php
轻抚酸~18 小时前
KNN(K近邻算法)-python实现
python·算法·近邻算法