Spring Boot 集成 MyBatis-Plus 详解
MyBatis-Plus 是 MyBatis 的增强版,提供了开箱即用的 CRUD 操作、条件构造器、分页插件等功能,简化了开发工作,提升了生产力。通过将 MyBatis-Plus 集成到 Spring Boot 中,开发者可以轻松构建高效、简洁的数据库访问层。
1. 项目依赖配置
在 Spring Boot 项目中集成 MyBatis-Plus 需要添加相关的依赖。MyBatis-Plus 提供了一个
spring-boot-starter
来简化配置过程。
1.1 添加 Maven 依赖
在
pom.xml
中添加如下依赖:
<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MyBatis-Plus Spring Boot Starter --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><!-- MySQL Connector --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- Lombok(可选,用于简化实体类代码) --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency></dependencies>
- mybatis-plus-boot-starter:MyBatis-Plus 与 Spring Boot 的集成 starter,简化了 MyBatis-Plus 的配置。
- mysql-connector-java:MySQL 数据库驱动。
1.2 配置数据库连接信息
在
src/main/resources/application.yml
中配置数据库连接信息:
spring:datasource:url: jdbc:mysql://localhost:3306/mydb
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:mapper-locations: classpath:mapper/*.xml# XML 配置文件路径type-aliases-package: com.example.demo.model # 实体类包路径
- datasource:数据库连接相关信息。
- mapper-locations:MyBatis Mapper XML 文件的路径。
- type-aliases-package:实体类所在包,简化 MyBatis-Plus 的类型映射。
2. MyBatis-Plus 基础配置
在 MyBatis-Plus 中,通常需要定义实体类、Mapper 接口和相应的 XML 文件(可选)。
2.1 创建实体类
假设有一个
User
表,包含
id
、
username
和
email
字段。首先创建对应的
User
实体类:
importcom.baomidou.mybatisplus.annotation.TableId;importcom.baomidou.mybatisplus.annotation.IdType;importlombok.Data;@DatapublicclassUser{@TableId(type =IdType.AUTO)// 指定主键生成策略为自增privateInteger id;privateString username;privateString email;}
- **
@TableId
**:指定主键及其生成策略,IdType.AUTO
表示使用数据库的自增主键。
2.2 创建 Mapper 接口
MyBatis-Plus 通过继承
BaseMapper
接口提供了基础的 CRUD 功能,开发者只需定义实体类对应的 Mapper 接口。
importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importcom.example.demo.model.User;importorg.apache.ibatis.annotations.Mapper;@MapperpublicinterfaceUserMapperextendsBaseMapper<User>{}
- **
BaseMapper
**:提供了通用的 CRUD 操作,支持insert
、update
、delete
、select
等基本功能。 - **
@Mapper
**:标识为 MyBatis Mapper,Spring Boot 会自动扫描并注入。
2.3 测试 CRUD 操作
为了测试基础的 CRUD 操作,我们创建一个简单的服务类和控制器。
服务类
importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;importcom.example.demo.mapper.UserMapper;importcom.example.demo.model.User;importorg.springframework.stereotype.Service;importjava.util.List;@ServicepublicclassUserServiceextendsServiceImpl<UserMapper,User>{publicList<User>getAllUsers(){returnlist();}publicUsergetUserById(int id){returngetById(id);}publicvoidcreateUser(User user){save(user);}publicvoidupdateUser(User user){updateById(user);}publicvoiddeleteUser(int id){removeById(id);}}
控制器
importcom.example.demo.model.User;importcom.example.demo.service.UserService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;importjava.util.List;@RestController@RequestMapping("/users")publicclassUserController{@AutowiredprivateUserService userService;@GetMappingpublicList<User>getAllUsers(){return userService.getAllUsers();}@GetMapping("/{id}")publicUsergetUserById(@PathVariableint id){return userService.getUserById(id);}@PostMappingpublicvoidcreateUser(@RequestBodyUser user){
userService.createUser(user);}@PutMapping("/{id}")publicvoidupdateUser(@PathVariableint id,@RequestBodyUser user){
user.setId(id);
userService.updateUser(user);}@DeleteMapping("/{id}")publicvoiddeleteUser(@PathVariableint id){
userService.deleteUser(id);}}
通过该控制器,可以通过 RESTful API 测试基本的 CRUD 操作。
3. 复杂查询与条件构造器
MyBatis-Plus 提供了
Wrapper
条件构造器来简化复杂查询的实现,
QueryWrapper
用于构建查询条件,
UpdateWrapper
用于构建更新条件。
3.1 使用
QueryWrapper
进行条件查询
importcom.baomidou.mybatisplus.core.conditions.query.QueryWrapper;importcom.example.demo.mapper.UserMapper;importcom.example.demo.model.User;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importjava.util.List;@ServicepublicclassUserService{@AutowiredprivateUserMapper userMapper;publicList<User>findUsersByCondition(String username,String email){QueryWrapper<User> queryWrapper =newQueryWrapper<>();
queryWrapper.eq(username !=null,"username", username).like(email !=null,"email", email);return userMapper.selectList(queryWrapper);}}
- **
eq
**:等值条件。 - **
like
**:模糊匹配。
该查询方法可以根据传入的条件动态生成 SQL 查询。
3.2 使用
UpdateWrapper
进行条件更新
importcom.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;publicvoidupdateUserEmail(Integer id,String email){UpdateWrapper<User> updateWrapper =newUpdateWrapper<>();
updateWrapper.eq("id", id).set("email", email);
userMapper.update(null, updateWrapper);}
- **
set
**:指定要更新的字段。 - **
eq
**:条件匹配。
该方法根据
id
更新用户的
email
字段。
4. 分页功能
MyBatis-Plus 提供了内置的分页插件,简化了分页查询操作。首先,需要在项目中配置分页插件。
4.1 配置分页插件
在
MyBatisPlusConfig
配置类中启用分页插件:
importcom.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassMyBatisPlusConfig{@BeanpublicPaginationInterceptorpaginationInterceptor(){returnnewPaginationInterceptor();}}
4.2 使用分页功能
在服务层使用分页功能:
importcom.baomidou.mybatisplus.extension.plugins.pagination.Page;importcom.example.demo.mapper.UserMapper;importcom.example.demo.model.User;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;@ServicepublicclassUserService{@AutowiredprivateUserMapper userMapper;publicPage<User>getUsersWithPagination(int pageNum,int pageSize){Page<User> page =newPage<>(pageNum, pageSize);return userMapper.selectPage(page,null);}}
在控制器中调用分页查询:
@GetMapping("/page")publicPage<User>getUsersWithPagination(@RequestParamint pageNum,@RequestParamint pageSize){return userService.getUsersWithPagination(pageNum, pageSize);}
- **
Page<T>
**:MyBatis-Plus 提供的分页对象
,用于封装分页结果。
5. MyBatis-Plus 常用功能总结
- 自动填充:通过
@TableField(fill = ...)
和MetaObjectHandler
实现插入和更新时的字段自动填充。 - 逻辑删除:通过
@TableLogic
实现逻辑删除。 - 乐观锁:通过
@Version
实现并发时的乐观锁机制。 - 批量操作:MyBatis-Plus 支持批量插入、更新操作,提升性能。
6. 总结
MyBatis-Plus 的集成和使用在 Spring Boot 项目中非常简单。通过
mybatis-plus-boot-starter
,开发者可以轻松构建基础的 CRUD 操作,并利用 MyBatis-Plus 提供的查询构造器、分页插件等功能,快速处理复杂的业务需求。
- 基础 CRUD:通过继承
BaseMapper
,可以直接调用常用的数据库操作方法。 - 复杂查询:利用
QueryWrapper
和UpdateWrapper
,实现灵活的条件查询和更新。 - 分页功能:通过 MyBatis-Plus 的分页插件,轻松实现分页查询。
- 事务管理:MyBatis-Plus 也完全支持 Spring 的事务管理,开发者可以使用
@Transactional
注解管理事务。
版权归原作者 Flying_Fish_Xuan 所有, 如有侵权,请联系我们删除。