SpringBoot集成mybatis-plus及分页实现

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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
目录
相关文章
|
2天前
|
前端开发 JavaScript Java
技术分享:使用Spring Boot3.3与MyBatis-Plus联合实现多层次树结构的异步加载策略
在现代Web开发中,处理多层次树形结构数据是一项常见且重要的任务。这些结构广泛应用于分类管理、组织结构、权限管理等场景。为了提升用户体验和系统性能,采用异步加载策略来动态加载树形结构的各个层级变得尤为重要。本文将详细介绍如何使用Spring Boot3.3与MyBatis-Plus联合实现这一功能。
17 2
|
13天前
|
Java 数据库连接 测试技术
SpringBoot 3.3.2 + ShardingSphere 5.5 + Mybatis-plus:轻松搞定数据加解密,支持字段级!
【8月更文挑战第30天】在数据驱动的时代,数据的安全性显得尤为重要。特别是在涉及用户隐私或敏感信息的应用中,如何确保数据在存储和传输过程中的安全性成为了开发者必须面对的问题。今天,我们将围绕SpringBoot 3.3.2、ShardingSphere 5.5以及Mybatis-plus的组合,探讨如何轻松实现数据的字段级加解密,为数据安全保驾护航。
47 1
|
27天前
|
Java 关系型数据库 MySQL
1、Mybatis-Plus 创建SpringBoot项目
这篇文章是关于如何创建一个SpringBoot项目,包括在`pom.xml`文件中引入依赖、在`application.yml`文件中配置数据库连接,以及加入日志功能的详细步骤和示例代码。
|
6天前
|
Java 数据库连接 开发者
MyBatis-Plus整合SpringBoot及使用
MyBatis-Plus为MyBatis提供了强大的增强,使得在Spring Boot项目中的数据访问层开发变得更加快捷和简便。通过MyBatis-Plus提供的自动CRUD、灵活的查询构造器和简洁的配置,开发者
19 0
|
27天前
|
数据库
elementUi使用dialog的进行信息的添加、删除表格数据时进行信息提示。删除或者添加成功的信息提示(SpringBoot+Vue+MybatisPlus)
这篇文章介绍了如何在基于SpringBoot+Vue+MybatisPlus的项目中使用elementUI的dialog组件进行用户信息的添加和删除操作,包括弹窗表单的设置、信息提交、数据库操作以及删除前的信息提示和确认。
elementUi使用dialog的进行信息的添加、删除表格数据时进行信息提示。删除或者添加成功的信息提示(SpringBoot+Vue+MybatisPlus)
|
27天前
|
Java 数据库 Spring
MyBatisPlus分页插件在SpringBoot中的使用
这篇文章介绍了如何在Spring Boot项目中配置和使用MyBatis-Plus的分页插件,包括创建配置类以注册分页拦截器,编写测试类来演示如何进行分页查询,并展示了测试结果和数据库表结构。
MyBatisPlus分页插件在SpringBoot中的使用
|
17天前
|
Java Spring
【Azure Developer】Springboot 集成 中国区的Key Vault 报错 AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found
【Azure Developer】Springboot 集成 中国区的Key Vault 报错 AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found
|
18天前
|
Java Spring
【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息
【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息
|
26天前
|
JavaScript Java 数据库
Vue+SpringBoot+ElementUi+mybatis-plus 实现用户信息的修改及模拟充值
这篇文章展示了如何使用Vue结合SpringBoot、ElementUI和mybatis-plus实现用户信息的修改以及模拟充值的功能。文章首先介绍了模拟充值的过程,包括充值前后的账户余额和数据库信息的截图。然后,文章展示了用户信息修改前后的界面和数据库信息。核心代码部分演示了如何使用mybatis-plus轻松实现用户信息的修改操作,同时指出了异常处理和代码组织的最佳实践。
|
27天前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
139 0