0


springboot集成MyBatis-Plus

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 操作,支持 insertupdatedeleteselect 等基本功能。
  • **@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,可以直接调用常用的数据库操作方法。
  • 复杂查询:利用 QueryWrapperUpdateWrapper,实现灵活的条件查询和更新。
  • 分页功能:通过 MyBatis-Plus 的分页插件,轻松实现分页查询。
  • 事务管理:MyBatis-Plus 也完全支持 Spring 的事务管理,开发者可以使用 @Transactional 注解管理事务。

本文转载自: https://blog.csdn.net/Flying_Fish_roe/article/details/142435293
版权归原作者 Flying_Fish_Xuan 所有, 如有侵权,请联系我们删除。

“springboot集成MyBatis-Plus”的评论:

还没有评论