springboot mybatisplus(超详细)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言:Spring Boot与MyBatis-Plus的协同进化

在Java后端开发领域,Spring BootMyBatis-Plus的组合堪称“黄金搭档”。前者通过约定优于配置的理念,极大简化了Spring框架的使用门槛;后者则基于MyBatis,以“代码增强”方式提供了更高效、简洁的数据库操作方案。对于编程初学者而言,这两大工具能快速降低开发复杂度;中级开发者则可通过其扩展性实现更复杂的业务逻辑。本文将从环境搭建到实战案例,逐步解析两者的深度整合。


环境搭建:从零开始的“搭积木”体验

1. 工具准备

  • 开发环境:Java 8+、IDE(如IntelliJ IDEA)、数据库(MySQL 5.7+)
  • 依赖管理:通过Maven或Gradle引入核心库

2. 依赖配置

pom.xml中添加以下依赖,相当于“组装积木的底层模块”:

<!-- Spring Boot Web模块 -->  
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
</dependency>  

<!-- MyBatis-Plus核心依赖 -->  
<dependency>  
    <groupId>com.baomidou</groupId>  
    <artifactId>mybatis-plus-boot-starter</artifactId>  
    <version>3.5.3</version>  
</dependency>  

<!-- MySQL驱动与Druid连接池 -->  
<dependency>  
    <groupId>mysql</groupId>  
    <artifactId>mysql-connector-java</artifactId>  
    <version>8.0.29</version>  
</dependency>  

3. 数据库与配置

application.yml中配置数据源:

spring:  
  datasource:  
    url: jdbc:mysql://localhost:3306/mydb?useSSL=false  
    username: root  
    password: 123456  
    driver-class-name: com.mysql.cj.jdbc.Driver  

mybatis-plus:  
  configuration:  
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 启用SQL日志  

核心功能:MyBatis-Plus的“魔法加速器”

1. 基础CRUD操作

MyBatis-Plus通过BaseMapper接口,将传统MyBatis的XML配置转化为“代码即SQL”的体验。例如:

实体类定义(User.java):

@Data  
public class User {  
    private Long id;  
    private String name;  
    private Integer age;  
    private Date createTime;  
}  

DAO层接口(UserMapper.java):

public interface UserMapper extends BaseMapper<User> {}  

此时,无需编写任何SQL语句,即可直接调用:

// 新增用户  
userMapper.insert(new User("Alice", 25, new Date()));  

// 查询用户  
User user = userMapper.selectById(1L);  

2. 条件构造器:动态SQL的“乐高积木”

QueryWrapper是MyBatis-Plus的“核心武器”,它允许通过链式调用构建复杂查询。例如:

QueryWrapper<User> wrapper = new QueryWrapper<>();  
wrapper.eq("age", 25)          // 相等条件  
       .likeRight("name", "A") // 右模糊匹配  
       .orderByDesc("create_time");  

List<User> users = userMapper.selectList(wrapper);  

比喻:就像快递员根据“年龄25岁”“姓名以A结尾”“按时间倒序”三个条件,精准筛选包裹。


分页与性能优化:让数据查询“快如闪电”

1. 分页查询

使用Page对象实现分页,代码简洁度远超传统方式:

Page<User> page = new Page<>(1, 10); // 当前页1,每页10条  
Page<User> result = userMapper.selectPage(page, new QueryWrapper<User>().gt("age", 30));  

2. 性能监控

通过MPConfiguration配置性能分析插件:

@Configuration  
public class MyBatisPlusConfig {  
    @Bean  
    public PerformanceInterceptor performanceInterceptor() {  
        return new PerformanceInterceptor();  
    }  
}  

启动后,控制台会输出SQL执行时间与执行计划,帮助开发者优化慢查询。


实战案例:用户管理系统

1. 服务层与控制层设计

Service层(UserService.java):

@Service  
public class UserService {  
    @Autowired  
    private UserMapper userMapper;  

    public void createUser(User user) {  
        user.setCreateTime(new Date());  
        userMapper.insert(user);  
    }  

    public List<User> getUsersByAge(Integer age) {  
        return userMapper.selectList(new QueryWrapper<User>().ge("age", age));  
    }  
}  

Controller层(UserController.java):

@RestController  
@RequestMapping("/users")  
public class UserController {  
    @Autowired  
    private UserService userService;  

    @PostMapping  
    public void addUser(@RequestBody User user) {  
        userService.createUser(user);  
    }  

    @GetMapping("/age/{age}")  
    public List<User> getUsersByAge(@PathVariable Integer age) {  
        return userService.getUsersByAge(age);  
    }  
}  

2. 测试与验证

通过Postman发送POST请求:

{  
    "name": "Bob",  
    "age": 30  
}  

成功后,访问/users/age/25可获取年龄≥25岁的用户列表。


进阶技巧:MyBatis-Plus的“隐藏超能力”

1. 自动填充功能

通过MetaObject实现字段的自动赋值,例如创建时间与更新时间:

@Component  
public class AutoFillHandler implements MetaObjectHandler {  
    @Override  
    public void insertFill(MetaObject metaObject) {  
        this.setFieldValByName("createTime", new Date(), metaObject);  
    }  

    @Override  
    public void updateFill(MetaObject metaObject) {  
        this.setFieldValByName("updateTime", new Date(), metaObject);  
    }  
}  

2. 逻辑删除与乐观锁

  • 逻辑删除:通过@TableLogic注解标记删除字段,避免物理删除数据。
  • 乐观锁:用@Version注解实现版本号控制,防止并发修改冲突。

3. 复杂关联查询

使用LambdaQueryWrapperleftJoin实现多表联查:

List<User> users = userMapper.selectList(new QueryWrapper<User>()  
    .leftJoin("orders", "user.id = orders.user_id")  
    .groupBy("user.id"));  

结论:从“会用”到“精通”的跃迁之路

通过本文的讲解,读者应能掌握Spring Boot MyBatisPlus的基本用法与进阶技巧。其核心优势在于:

  • 开发效率:减少50%以上的重复代码
  • 可维护性:通过约定规范降低团队协作成本
  • 扩展性:插件化设计支持二次开发

对于初学者,建议从简单CRUD开始,逐步尝试分页、条件查询;中级开发者可深入研究自定义拦截器、分布式ID生成等高级功能。记住,工具的价值在于“让复杂问题简单化”,而不仅仅是代码量的减少。

持续学习建议

  1. 阅读MyBatis-Plus源码,理解其“代码增强”原理
  2. 结合Spring Security实现权限管理
  3. 使用Redis缓存高频查询结果,优化系统性能

通过不断实践与探索,开发者将真正掌握这一技术组合的“魔法杖”,在Java后端领域游刃有余。

最新发布