mybatis-plus LambdaQueryWrapper分页查询+指定字段排序

该文章已生成可运行项目,

   当前端传递要排序的字段和排序的顺序时,后台又想使用LambdaQueryWrapper时可使用下面方法

public BaseResponse<Page<User>> listUserByPage(@RequestBody UserQueryRequest userQueryRequest) {
        ThrowUtils.throwIf(ObjUtil.isEmpty(userQueryRequest), ErrorCode.PARAMS_ERROR);
        LambdaQueryWrapper<User> qw = new LambdaQueryWrapper<>();
        qw.eq(ObjUtil.isNotNull(userQueryRequest.getId()), User::getId, userQueryRequest.getId());
        qw.like(StrUtil.isNotBlank(userQueryRequest.getUserName()), User::getUserName, userQueryRequest.getUserName());
        qw.like(StrUtil.isNotBlank(userQueryRequest.getUserAccount()), User::getUserAccount, userQueryRequest.getUserAccount());
        qw.like(StrUtil.isNotBlank(userQueryRequest.getUserProfile()), User::getUserProfile, userQueryRequest.getUserProfile());

        Page<User> objectPage = new Page<>(userQueryRequest.getCurrent(), userQueryRequest.getPageSize());
        //拼接排序条件
        if (StrUtil.isNotBlank(userQueryRequest.getSortField())) {
            OrderItem orderItem = new OrderItem();
            orderItem.setAsc("asc".equals(userQueryRequest.getSortOrder()));
            orderItem.setColumn(userQueryRequest.getSortField());
            objectPage.addOrder(orderItem);
        }
        Page<User> userPage = userService.page(objectPage, qw);
        return ResultUtils.success(userPage);
    }

为什么要使用LambdaQueryWrapper  

一般的QueryWrapper需要写表的列名,不想写

xml也不想写

本文章已经生成可运行项目
MyBatis-Plus分页查询指定排序字段后,对性能的影响具有多面性,具体如下: ### 正向影响 - **索引优化**:若指定排序字段存在索引,数据库能够利用该索引快速定位并排序数据。例如在MySQL中,当对一个有百万级数据量的`users`表按`create_time`字段排序,且`create_time`字段上有索引时,数据库可以直接通过索引获取有序数据,避免了全表扫描,提高了查询性能。 ```java import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserMapper userMapper; public IPage<User> getUsersByCreateTime(int pageNum, int pageSize) { Page<User> page = new Page<>(pageNum, pageSize); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.orderByAsc("create_time"); return userMapper.selectPage(page, queryWrapper); } } ``` - **数据有序性**:排序后的数据在后续处理中可能会更高效。例如在进行数据统计或聚合操作时,有序的数据可以减少额外的排序步骤,提升整体处理效率。 ### 负向影响 - **全表扫描**:若指定排序字段没有索引,数据库为了实现排序,可能会进行全表扫描,将所有数据加载到内存中进行排序。对于大数据量的表,这会消耗大量的CPU和内存资源,严重影响性能。 - **排序开销**:即使排序字段有索引,当数据量非常大时,排序操作本身也会带来一定的开销。数据库需要对大量数据进行比较和交换操作,这会增加查询的响应时间。 - **内存占用**:排序过程中,数据库可能需要将部分数据加载到内存中进行处理。若数据量过大,可能会导致内存不足,进而引发磁盘交换,进一步降低性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值