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 Boot与MyBatis-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. 复杂关联查询
使用LambdaQueryWrapper
与leftJoin
实现多表联查:
List<User> users = userMapper.selectList(new QueryWrapper<User>()
.leftJoin("orders", "user.id = orders.user_id")
.groupBy("user.id"));
结论:从“会用”到“精通”的跃迁之路
通过本文的讲解,读者应能掌握Spring Boot MyBatisPlus的基本用法与进阶技巧。其核心优势在于:
- 开发效率:减少50%以上的重复代码
- 可维护性:通过约定规范降低团队协作成本
- 扩展性:插件化设计支持二次开发
对于初学者,建议从简单CRUD开始,逐步尝试分页、条件查询;中级开发者可深入研究自定义拦截器、分布式ID生成等高级功能。记住,工具的价值在于“让复杂问题简单化”,而不仅仅是代码量的减少。
持续学习建议:
- 阅读MyBatis-Plus源码,理解其“代码增强”原理
- 结合Spring Security实现权限管理
- 使用Redis缓存高频查询结果,优化系统性能
通过不断实践与探索,开发者将真正掌握这一技术组合的“魔法杖”,在Java后端领域游刃有余。