springboot之集成mybatis-plus
本文介绍了SpringBoot项目集成MyBatis-Plus的详细步骤。首先对比了MyBatis和MyBatis-Plus的优缺点,重点突出MyBatis-Plus在CRUD操作、条件构造器等方面的优势。然后详细说明了集成过程:1)引入相关依赖;2)配置数据源;3)设置Mapper扫描;4)创建Mapper接口;5)编写Service层;6)定义Controller测试接口。文章还特别强调了分模
编写SQL语句是我们日常开发中不可避免的,而趁手的开发工具,又是减少日常开发量的好伙伴。
一、Mybatis与MyBatis-Plus对比
Mybatis:基础 ORM 框架,需手动编写 SQL 及配置映射,灵活性高但开发效率较低。
MyBatis-Plus:基于 MyBatis 的增强工具包,提供通用 Mapper、条件构造器等功能,单表操作无需手写 SQL。
以下是两者的优缺点对比
特性 | Mybatis | MyBatis-Plus |
---|---|---|
CRUD 操作 | 需手动编写所有 SQL | 内置通用 CRUD 方法(如 selectById) |
条件构造器 | 手动拼接动态 SQL | 提供 QueryWrapper 和 Lambda 表达式支持 |
代码生成器 | 无内置支持 | 支持自动生成实体类、Mapper 接口等 |
分页功能 | 需集成第三方插件(如 PageHelper) | 内置物理分页插件,统一使用 Page<T> 对象 |
主键策略 | 需手动配置 | 支持雪花算法等 4 种主键生成策略 |
SQL 注入防护 | 依赖开发者规范使用 | 内置 SQL 注入剥离器 |
看过上面的对比图之后,就知道MyBatis-Plus多香了吧!!!嘎嘎嘎!!!
但实际开发中,也需结合实际的业务场景,业务场景复杂,纯手工SQL的,mybatis可能更占优势。
本文主要讲解springboot项目集成mybatis-plus,想看mybatis的童鞋可自行前往下一站!
坐好扶稳,要发车了!!!
二、 集成mybatisplus
本示例基于springboot2.7.18!各位童鞋别上错车了!
2.1 准备一个springboot项目
由于在前面的文章中,我已经创建了具体的项目,所以这篇文章基于该项目:
基础的项目结构如下:
2.2 引入mybatisplus相关配置
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId> <!-- 代码生成器,使用它解析表结构 -->
</dependency>
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-boot-starter</artifactId> <!-- MyBatis 联表查询 -->
</dependency>
细心的同学一定发现了我上面的依赖都没有加上版本号,带着这个疑问,可以去阅读一下这篇文章
springboot中父子项目之版本依赖管理
2.3 yaml配置
spring:
####### 数据源配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
url: jdbc:mysql://127.0.0.1:3306/springboot?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
2.4 配置mybatis扫描
这个配置类主要用于扫描项目中所有带@Mapper注解的类
@SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${hs.info.base-package}
@MapperScan(value = "${hs.info.base-package}", annotationClass = Mapper.class,
lazyInitialization = "${mybatis.lazy-initialization:false}") // 配置扫描mapper路径,懒加载
@AutoConfiguration(before = MybatisPlusAutoConfiguration.class) // 目的:先于 MyBatis Plus 自动配置,避免 @MapperScan 可能扫描不到 Mapper 打印 warn 日志
public class HsMybatisAutoConfiguration {
}
上面的hs.info.base-package,是在yaml可以进行自定义的配置,如下:
################# 个人的一些配置
hs:
info:
base-package: com.hs
version: 1.0.0
注意注意注意:由于项目是分模块部署,我们将启动类放置在hs-server,那正常项目启动类是扫描不到hs-spring-boot-starter-mybatis模块中的配置的,所以我们需要加一些配置,使自定义的配置类生效,可参考这篇文章:解决springboot分模块部署项目时,SpringApplication启动类扫描不到其他模块配置类的问题
2.5 配置Mapper
注意:
AdminUserMapper 要加@Mapper注解!
AdminUserMapper 要加@Mapper注解!
AdminUserMapper 要加@Mapper注解!
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder // 方便链式调用
@TableName(value = "system_users", autoResultMap = true) // 由于 SQL Server 的 system_user 是关键字,所以使用 system_users
public class AdminUserDO {
@TableId
private Long id;
}
/**
* 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力
*
* 1. {@link BaseMapper} 为 MyBatis Plus 的基础接口,提供基础的 CRUD 能力
* 2. {@link MPJBaseMapper} 为 MyBatis Plus Join 的基础接口,提供连表 Join 能力
*/
public interface BaseMapperX<T> extends MPJBaseMapper<T>{
}
@Mapper
public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
}
针对上面的MPJBaseMapper,需再引入,版本号:1.4.13
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-boot-starter</artifactId> <!-- MyBatis 联表查询 -->
</dependency>
2.6 定义Service
注意:
AdminUserServiceImpl 要加@Service注解!
AdminUserServiceImpl 要加@Service注解!
AdminUserServiceImpl 要加@Service注解!
public interface AdminUserService {
/**
* 通过用户 ID 查询用户
*
* @param id 用户ID
* @return 用户对象信息
*/
AdminUserDO getUser(Long id);
}
@Service
@Slf4j
public class AdminUserServiceImpl implements AdminUserService{
@Resource
private AdminUserMapper userMapper;
@Override
public AdminUserDO getUser(Long id) {
return userMapper.selectById(id);
}
}
2.7 定义一个Controller测试
@RestController
@RequestMapping("/system/user")
@Validated
public class UserController {
@Autowired
AdminUserService userService;
@GetMapping("/get")
public CommonResult<UserRespVO> getUser(@RequestParam("id") Long id) {
AdminUserDO user = userService.getUser(id);
if (user == null) {
return success(null);
}
DeptDO dept = new DeptDO();
return success(UserConvert.INSTANCE.convert(user, dept));
}
@RequestMapping("/test")
public String test() {
return "test";
}
}
2.8 测试连通性
至此,springboot集成mybatisplus就大功告成!有问题的小伙伴,欢迎在评论区提问!
我是写代码的小和尚,平时喜欢写写博客,如果我的文章对您有所帮助,麻烦点赞收藏一下吧!让更多的人看见,谢谢大家!

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)