一、引言
在 Java 开发领域,Spring Boot 凭借其简洁高效的项目搭建与配置,成为众多开发者构建应用的首选框架;MyBatis-Plus 作为 MyBatis 的增强工具,以强大的 CRUD 封装、便捷的条件构造等特性,大幅提升开发效率。本文将详细讲解如何在 Spring Boot 项目中集成 MyBatis-Plus,助力 Java 开发者快速上手并运用这一高效组合。
二、环境准备
(一)开发工具
推荐使用 IntelliJ IDEA,其丰富的插件生态、智能代码提示等功能,能极大提升开发体验。也可选用 Eclipse 等其他 Java 开发工具,根据个人习惯灵活选择。
(二)技术栈版本
- Spring Boot:选用 2.7.x 版本(稳定且功能完善,社区支持良好 )。
- MyBatis-Plus:3.5.x 版本(具备最新特性,对各种场景适配性佳 )。
- Java:建议使用 1.8 及以上版本(保证对新特性的支持,兼容多数项目环境 )。
- MySQL:8.0 版本(流行的关系型数据库,与 Java 生态适配良好 )。
三、项目搭建(基于 Spring Boot 初始化)
(一)使用 Spring Initializr 创建项目
- 访问 Spring Initializr ,在页面中进行如下配置:
- Project:选择 Maven(或 Gradle,本文以 Maven 为例 )。
- Language:选 Java。
- Spring Boot:选 2.7.x 版本。
- Group:填写组织标识,如
com.example
。 - Artifact:填写项目名称,如
springboot-mybatisplus-demo
。 - Dependencies:添加
Spring Web
(用于构建 Web 应用 )、MySQL Driver
(数据库驱动 )依赖,暂时不添加 MyBatis-Plus 依赖,后续手动引入。
- 点击 “Generate” 按钮,下载项目压缩包,解压后导入开发工具。
(二)手动添加 MyBatis-Plus 依赖
打开项目的 pom.xml
文件,在 <dependencies>
标签内添加 MyBatis-Plus 核心依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.x</version>
</dependency>
添加后,执行 Maven 的 clean
和 install
命令,下载依赖到本地仓库。
四、配置数据库连接与 MyBatis-Plus
(一)配置数据库连接
在 application.yml
(或 application.properties
,推荐使用 YAML 格式,更简洁 )中配置 MySQL 连接:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: your_password
将 your_database
、your_password
替换为实际的数据库名和密码。
(二)配置 MyBatis-Plus
在 application.yml
中添加 MyBatis-Plus 相关配置,指定 mapper 映射文件位置、实体类包路径等:
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.springbootmybatisplusdemo.entity
configuration:
map-underscore-to-camel-case: true # 开启驼峰命名自动映射
mapper-locations
用于指定 XML 形式的 SQL 映射文件位置;type-aliases-package
指定实体类所在包,方便在 XML 中使用别名;map-underscore-to-camel-case
开启后,数据库字段 user_name
可自动映射到实体类属性 userName
。
五、代码实现
(一)创建实体类
以 User
实体类为例,在 com.example.springbootmybatisplusdemo.entity
包下创建:
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user") // 映射数据库表名,若类名与表名一致可省略
public class User {
private Long id;
private String userName;
private Integer age;
private String email;
}
@Data
是 Lombok 注解,自动生成 getter、setter 等方法;@TableName
用于指定对应数据库表名。
(二)创建 Mapper 接口
在 com.example.springbootmybatisplusdemo.mapper
包下创建 UserMapper
接口:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.springbootmybatisplusdemo.entity.User;
import org.apache.haoxmlbeans.persistence.xml.orm.xxs.schema.entitymapping.EntityMapping;
public interface UserMapper extends BaseMapper<User> {
// 可自定义 SQL 方法,MyBatis-Plus 已默认实现基本 CRUD
}
继承 BaseMapper
后,无需编写代码,即可拥有 insert
、delete
、update
、select
等基础 CRUD 方法。
(三)创建 Service 层
- Service 接口:在
com.example.springbootmybatisplusdemo.service
包下创建UserService
接口:
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.springbootmybatisplusdemo.entity.User;
public interface UserService extends IService<User> {
// 可扩展自定义业务方法
}
继承 IService
,获得 MyBatis-Plus 提供的批量操作、条件查询等增强方法。
2. Service 实现类:在同包下创建 UserServiceImpl
实现类:
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.springbootmybatisplusdemo.entity.User;
import com.example.springbootmybatisplusdemo.mapper.UserMapper;
import com.example.springbootmybatisplusdemo.service.UserService;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
// 可重写或扩展业务方法
}
继承 ServiceImpl
,自动注入 UserMapper
,实现 UserService
接口。
(四)创建 Controller 层
在 com.example.springbootmybatisplusdemo.controller
包下创建 UserController
:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.springbootmybatisplusdemo.entity.User;
import com.example.springbootmybatisplusdemo.service.UserService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
// 新增用户
@PostMapping
public User addUser(@RequestBody User user) {
userService.save(user);
return user;
}
// 查询所有用户
@GetMapping
public List<User> listUsers() {
return userService.list();
}
// 根据用户名查询用户(示例:使用条件构造器)
@GetMapping("/byName")
public List<User> getUsersByName(@RequestParam String userName) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("user_name", userName);
return userService.list(queryWrapper);
}
// 更新用户
@PutMapping
public boolean updateUser(@RequestBody User user) {
return userService.updateById(user);
}
// 删除用户
@DeleteMapping("/{id}")
public boolean deleteUser(@PathVariable Long id) {
return userService.removeById(id);
}
}
通过 @RestController
等注解构建 RESTful 接口,调用 UserService
方法实现用户的增删改查操作;QueryWrapper
是 MyBatis-Plus 强大的条件构造器,方便拼接复杂查询条件。
六、功能测试
(一)启动项目
运行 Spring Boot 项目的启动类(默认生成的 SpringbootMybatisplusDemoApplication
),查看控制台日志,确认项目启动成功,数据库连接正常,MyBatis-Plus 相关 Bean 加载完成。
(二)接口测试
使用 Postman 或其他接口测试工具,对 UserController
中的接口进行测试:
- 新增用户:发送
POST
请求到http://localhost:8080/user
,请求体传入 JSON 格式的用户数据,如{"userName": "test", "age": 20, "email": "test@example.com"}
,查看返回结果是否为新增的用户信息。 - 查询所有用户:发送
GET
请求到http://localhost:8080/user
,检查返回的用户列表是否正确。 - 条件查询:发送
GET
请求到http://localhost:8080/user/byName?userName=test
,验证返回符合条件的用户数据。 - 更新用户:发送
PUT
请求到http://localhost:8080/user
,传入修改后的用户 JSON 数据,查看返回是否为true
,并查询数据库确认更新生效。 - 删除用户:发送
DELETE
请求到http://localhost:8080/user/{id}
(替换{id}
为实际用户 ID ),检查返回是否为true
,数据库中对应记录是否删除。
七、高级特性拓展(可选)
(一)代码生成器使用
MyBatis-Plus 提供代码生成器,可自动生成 Entity、Mapper、Service、Controller 等代码。在 pom.xml
中添加代码生成器依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.x</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
编写生成器代码(可参考官方文档示例 ),配置数据库连接、生成路径、包名等,快速生成基础代码,提升开发效率。
(二)分页功能实现
- 配置分页插件:在项目中创建配置类
MyBatisPlusConfig
:
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 添加分页插件
return interceptor;
}
}
- 在 Service 层或 Controller 层使用分页:
// 在 UserService 中添加分页方法示例
public Page<User> pageUsers(int pageNum, int pageSize) {
Page<User> page = new Page<>(pageNum, pageSize);
return userService.page(page);
}
// 在 UserController 中暴露分页接口
@GetMapping("/page")
public Page<User> pageUsers(@RequestParam int pageNum, @RequestParam int pageSize) {
return userService.pageUsers(pageNum, pageSize);
}
通过上述配置和代码,即可实现分页查询功能,MyBatis-Plus 会自动拼接分页 SQL 语句。
(三)逻辑删除配置
- 在
application.yml
中配置逻辑删除字段:
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted # 逻辑删除字段名(实体类和数据库表中需有此字段)
logic-delete-value: 1 # 逻辑删除值
logic-not-delete-value: 0 # 未逻辑删除值
- 在实体类
User
中添加逻辑删除字段:
import com.baomidou.mybatisplus.annotation.TableLogic;
// ...其他注解和属性
public class User {
// ...其他属性
@TableLogic
private Integer deleted;
}
配置后,执行删除操作时,MyBatis-Plus 会自动将删除操作转为更新 deleted
字段为逻辑删除值,查询时自动过滤已逻辑删除的数据。
八、总结
通过本文的讲解,我们完整实现了 Spring Boot 与 MyBatis-Plus 的集成,从项目搭建、配置到代码编写、功能测试,再到高级特性拓展,涵盖了日常开发的主要流程。这一组合能大幅简化 Java 项目中数据访问层的开发,提升开发效率与代码质量。开发者可在此基础上,结合实际业务需求,进一步拓展功能,打造高效、稳定的 Java 应用。