SpringBoot集成mybatis-plus及分页实现

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: SpringBoot集成mybatis-plus及分页实现

前面我们将了Spring Boot集成Mybatis相关的操作,而在Mybatis-plus则是基于Mybatis进行了更加丰富的基础功能提供和封装,比如预置了大量的默认方法以及分页组件。

比如其中提供的BaseMapper,用于其他业务Mapper的集成接口变定义了如下常见的功能的接口:






























































































































public interface BaseMapper<T> extends Mapper<T> {
    /**     * 插入一条记录     *     * @param entity 实体对象     */    int insert(T entity);
    /**     * 根据 ID 删除     *     * @param id 主键ID     */    int deleteById(Serializable id);
    /**     * 根据 columnMap 条件,删除记录     *     * @param columnMap 表字段 map 对象     */    int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
    /**     * 根据 entity 条件,删除记录     *     * @param wrapper 实体对象封装操作类(可以为 null)     */    int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
    /**     * 删除(根据ID 批量删除)     *     * @param idList 主键ID列表(不能为 null 以及 empty)     */    int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
    /**     * 根据 ID 修改     *     * @param entity 实体对象     */    int updateById(@Param(Constants.ENTITY) T entity);
    /**     * 根据 whereEntity 条件,更新记录     *     * @param entity        实体对象 (set 条件值,可以为 null)     * @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)     */    int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
    /**     * 根据 ID 查询     *     * @param id 主键ID     */    T selectById(Serializable id);
    /**     * 查询(根据ID 批量查询)     *     * @param idList 主键ID列表(不能为 null 以及 empty)     */    List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
    /**     * 查询(根据 columnMap 条件)     *     * @param columnMap 表字段 map 对象     */    List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
    /**     * 根据 entity 条件,查询一条记录     *     * @param queryWrapper 实体对象封装操作类(可以为 null)     */    T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    /**     * 根据 Wrapper 条件,查询总记录数     *     * @param queryWrapper 实体对象封装操作类(可以为 null)     */    Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    /**     * 根据 entity 条件,查询全部记录     *     * @param queryWrapper 实体对象封装操作类(可以为 null)     */    List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    /**     * 根据 Wrapper 条件,查询全部记录     *     * @param queryWrapper 实体对象封装操作类(可以为 null)     */    List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    /**     * 根据 Wrapper 条件,查询全部记录     * <p>注意: 只返回第一个字段的值</p>     *     * @param queryWrapper 实体对象封装操作类(可以为 null)     */    List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    /**     * 根据 entity 条件,查询全部记录(并翻页)     *     * @param page         分页查询条件(可以为 RowBounds.DEFAULT)     * @param queryWrapper 实体对象封装操作类(可以为 null)     */    <E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    /**     * 根据 Wrapper 条件,查询全部记录(并翻页)     *     * @param page         分页查询条件     * @param queryWrapper 实体对象封装操作类     */    <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);}

通过上述预置的接口及实现,我们可以节省大量的时间,减少大量重复代码的编写,本篇文章就带大家了解一下如何在spring boot中集成mybatis-plus。

依赖引入

mybatis-plus本身提供了spring boot的starter,注意这里依旧不是springboot官方提供的。

相关核心依赖引入如下:




































<dependencies>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>
    <!-- 引入mybatisPlus -->    <dependency>        <groupId>com.baomidou</groupId>        <artifactId>mybatis-plus-boot-starter</artifactId>        <version>3.3.1</version>    </dependency>
    <dependency>        <groupId>mysql</groupId>        <artifactId>mysql-connector-java</artifactId>    </dependency>
    <dependency>        <groupId>org.projectlombok</groupId>        <artifactId>lombok</artifactId>        <optional>true</optional>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-test</artifactId>        <scope>test</scope>        <exclusions>            <exclusion>                <groupId>org.junit.vintage</groupId>                <artifactId>junit-vintage-engine</artifactId>            </exclusion>        </exclusions>    </dependency></dependencies>

这里重点是mybatis-plus-boot-starter,其他的引入依赖与mybatis相似,但没有引入mybatis对应的starter。

数据库配置

在application配置文件中进行数据库的配置:





spring.datasource.url=jdbc:mysql://localhost:3306/spring?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=truespring.datasource.username=rootspring.datasource.password=genesis_123spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

依旧采用spring的datasource配置。

开启Mapper接口扫描

在启动类上添加@MapperScan来指定Mapper接口对应的包路径。










@SpringBootApplication@MapperScan("com.secbro.mapper")public class SpringBootMainApplication {
  public static void main(String[] args) {    SpringApplication.run(SpringBootMainApplication.class, args);  }
}

MybatisPlus分页插件配置

这里主要演示分页功能使用,因此需要通过单独的配置类来配置分页组件:










@Configuration@ConditionalOnClass(value = {PaginationInterceptor.class})public class MybatisPlusConfig {  @Bean  public PaginationInterceptor paginationInterceptor() {    PaginationInterceptor paginationInterceptor = new PaginationInterceptor();    return paginationInterceptor;  }}

实体类与Mapper接口

实体类如下,注意如果类名与数据库表名不一致使用@TableName指定数据库表名。











@Data@TableName("tb_order")public class Order {
  private int id;
  private String orderNo;
  private int amount;}

Mapper接口定义如下,集成BaseMapper,这样便拥有了上面展示的BaseMapper的对应方法功能。




public interface OrderMapper extends BaseMapper<Order> {
}

此时,不用再写任何代码便可以注入OrderMapper,调用一系列默认的增产改查及分页功能了。

单元测试

这里以分页功能的使用为例来进行单元测试的演示:




















@Slf4j@SpringBootTestclass OrderMapperTest {
  @Resource  private OrderMapper orderMapper;
  @Test  void queryByPage() {    //参数一是当前页,参数二是每页个数    IPage<Order> orderPage = new Page<>(1, 2);    orderPage = orderMapper.selectPage(orderPage, null);    List<Order> list = orderPage.getRecords();    for (Order order : list) {      System.out.println(order);    }  }
}

当然,在实践中OrderMapper是要注入到对应service中进行使用的。

执行单元测试,发现成功查询数据库中记录并打印,分页功能正常使用。这里Page有多个构造参数,也会返回各类数据,比如分页总数,总条数等信息。大家可按照该思路调用对应方法尝试使用。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9天前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
36 1
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
105 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
53 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
19天前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
23 1
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
290 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
9天前
|
XML 存储 Java
SpringBoot集成Flowable:构建强大的工作流引擎
在企业级应用开发中,工作流管理是核心功能之一。Flowable是一个开源的工作流引擎,它提供了BPMN 2.0规范的实现,并且与SpringBoot框架完美集成。本文将探讨如何使用SpringBoot和Flowable构建一个强大的工作流引擎,并分享一些实践技巧。
27 0
|
1月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
86 1
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
66 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
SQL Java 数据库连接
mybatis使用二:springboot 整合 mybatis,创建开发环境
这篇文章介绍了如何在SpringBoot项目中整合Mybatis和MybatisGenerator,包括添加依赖、配置数据源、修改启动主类、编写Java代码,以及使用Postman进行接口测试。
17 0
mybatis使用二:springboot 整合 mybatis,创建开发环境
|
1月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。