使用mybatis-plus实现分页查询

第一步,在maven中导入mybatis-plus依赖。

<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.4.2</version>
</dependency>

第二步,在application.yml中添加如下配置:

mybatis-plus:
  configuration:
    #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID

第二步,创建mybatis-plus配置类并添加@Configuration注解,然后在MybatisPlusInterceptor拦截器对象中添加分页拦截器,返回对象并注入到bean容器中。
以下是具体代码:

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加分页查询拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

第三步,在controller层接收前端传来的分页信息,包括当前页号(page)、页大小(pageSize)、查询关键字(name)等。根据分页信息创建Page类对象和查询条件构造器LambdaQueryWrapper类对象,然后使用mybatis-plus提供的service层对象中的page(IPage<T> page, Wrapper<T> queryWrapper)方法,该方法会将查询结果赋值给传入的第一个参数page对象,之后我们就可以直接给前端返回查询结果pageInfo对象。
下面来看代码:

@GetMapping("/page")
    public R<Page> page(int page, int pageSize, String name) {
        log.info("page: {}, pageSize: {}, name: {}", page,pageSize,name);
        // 创建Page类对象
        Page<Employee> pageInfo = new Page(page, pageSize);
        // 创建查询条件构造器LambdaQueryWrapper类对象
        LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
		// 根据条件查询
        queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName, name);

        queryWrapper.orderByDesc(Employee::getUpdateTime);
        // 查询结果返回到pageInfo中的records属性中
        employeeService.page(pageInfo, queryWrapper);
        // 返回查询结果pageInfo对象给前端
        return R.success(pageInfo);
    }

这里我们需要注意一下为什么可以直接返回pageInfo这个对象作为结果,我们来查看Page类中的属性以及service层的page方法:

Page类:

public class Page<T> implements IPage<T> {
    private static final long serialVersionUID = 8545996863226528798L;
    protected List<T> records;		// 查询结果
    protected long total;			// 总页数
    protected long size;			// 页大小
    protected long current;			 // 当前页
    protected List<OrderItem> orders;
    protected boolean optimizeCountSql;
    protected boolean isSearchCount;
    protected boolean hitCount;
    protected String countId;
    protected Long maxLimit;
}

当执行完service层的page方法后会将查询结果封装到Page类对象中的records属性中。

下面看一下service层page方法是如何实现该操作的:
service层的page方法将调用mapper层的selectPage方法,并且将查询结果封装到IPage对象中返回。
以下是selectPage方法法定义:

IPage<T> selectPage(IPage<T> page, @Nullable Wrapper<T> queryWrapper);

其中,IPage 是 Mybatis-Plus 提供的分页对象接口,T 表示实体类类型,page 参数是分页对象,queryWrapper 参数是查询条件。
调用 selectPage 方法时,需要传入一个分页对象,该对象包含了分页信息(当前页码、每页显示数量等)以及查询结果。同时,还可以传入一个查询条件,用于过滤查询结果。
在执行 selectPage 方法时,Mybatis-Plus 会根据传入的分页对象进行分页查询,并将查询结果封装到分页对象中返回。具体的 SQL 查询语句由 Mybatis-Plus 自动生成,无需手动编写。

以上就是使用mybatis-plus实现分页查询的步骤,实际上我们只需配置分页拦截器并提供分页信息及查询条件,剩下的SQL操作都由mybatis-plus框架帮我们实现好了。

使用mybatis-plus实现分页查询有两种方式。 方式一:在service层使用QueryWrapper进行查询 ```java public IPage<SettleAgentAccount> findAgentAccount(SettleAgentAccountBO settleAgentAccountBO) { BasePage<SettleAgentAccount> page = this.lambdaQuery() .like(ObjectUtil.isNotEmpty(settleAgentAccountBO.getAgentName()), SettleAgentAccount::getAgentName, settleAgentAccountBO.getAgentName()) .like(ObjectUtil.isNotEmpty(settleAgentAccountBO.getAgentMobile()), SettleAgentAccount::getAgentMobile, settleAgentAccountBO.getAgentMobile()) .eq(ObjectUtil.isNotEmpty(settleAgentAccountBO.getAgentLevel()), SettleAgentAccount::getAgentLevel, settleAgentAccountBO.getAgentLevel()) .between(ObjectUtil.isNotEmpty(settleAgentAccountBO.getStartTime()) && ObjectUtil.isNotEmpty(settleAgentAccountBO.getEndTime()), SettleAgentAccount::getPayTime, settleAgentAccountBO.getStartTime(), settleAgentAccountBO.getEndTime()) .page(settleAgentAccountBO.parse()); return page; } ``` 方式二:自己编写mapper文件实现分页查询 ```xml <!-- 在xml文件中编写自定义的分页查询sql语句 --> <select id="findAgentAccount" resultType="SettleAgentAccount"> SELECT * FROM settle_agent_account WHERE agent_name LIKE CONCAT('%', #{agentName}, '%') AND agent_mobile LIKE CONCAT('%', #{agentMobile}, '%') AND agent_level = #{agentLevel} AND pay_time BETWEEN #{startTime} AND #{endTime} LIMIT #{offset}, #{pageSize} </select> ``` 注意:以上代码中的变量名和表名需要根据实际情况进行修改。 以上就是使用mybatis-plus进行分页查询的两种常用方式。方式一是在service层使用QueryWrapper进行查询,方式二是自己编写mapper文件实现分页查询。根据具体的项目需求和个人喜好,可以选择适合自己的方式来进行分页查询操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值