夏小雨 2023-11-26 20:31 采纳率: 20.7%
浏览 45

dto和vo和实体类分页查询数据

现在有一张表user

img


要求是如何使用dto和vo和实体类进行分页查询根据username查询,长度必须大于0才查询,dto接收数据之后调用mybatis-plus中的mapper内置selectPage方法查询返回一个IPage对象,把它转成vo之后返回给前端

  • 写回答

1条回答 默认 最新

  • 雪豹同志 2025-09-14 09:43
    关注

    要实现基于  dto 、 vo  和实体类的分页查询,可按以下步骤操作:

    1. 定义相关类
    • 实体类(Entity):对应数据库  user  表,代码如下:

    java

    
    @Data
    @TableName("user")
    public class UserEntity implements Serializable {
        private Long id;
        private String username;
        private String password;
    }
    
    
    • DTO 类:用于接收前端查询参数,代码如下:

    java

    
    @Data
    public class UserDTO implements Serializable {
        private String username;
        private Integer pageNum = 1;
        private Integer pageSize = 10;
    }
     
    
    
    • VO 类:用于向前端返回数据,代码如下:

    java

    
    @Data
    public class UserVO implements Serializable {
        private Long id;
        private String username;
    }
     
    
    
    1. Mapper 接口

    继承  MyBatis - Plus  的  BaseMapper ,代码如下:

    java

    
    public interface UserMapper extends BaseMapper<UserEntity> {
    }
     
    
    
    1. Service 层
    • Service 接口:

    java

    
    public interface UserService extends IService<UserEntity> {
        IPage<UserVO> pageQuery(UserDTO userDTO);
    }
     
     
    
    • Service 实现类:

    java

    
    @Service
    public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements UserService {
        @Override
        public IPage<UserVO> pageQuery(UserDTO userDTO) {
            LambdaQueryWrapper<UserEntity> queryWrapper = new LambdaQueryWrapper<>();
            if (userDTO.getUsername() != null && userDTO.getUsername().length() > 0) {
                queryWrapper.like(UserEntity::getUsername, userDTO.getUsername());
            }
            IPage<UserEntity> entityPage = new Page<>(userDTO.getPageNum(), userDTO.getPageSize());
            IPage<UserEntity> userEntityIPage = baseMapper.selectPage(entityPage, queryWrapper);
            IPage<UserVO> voPage = new Page<>();
            BeanUtils.copyProperties(userEntityIPage, voPage);
            List<UserVO> voList = userEntityIPage.getRecords().stream().map(entity -> {
                UserVO vo = new UserVO();
                BeanUtils.copyProperties(entity, vo);
                return vo;
            }).collect(Collectors.toList());
            voPage.setRecords(voList);
            return voPage;
        }
    }
     
     
    
    1. Controller 层

    java

    @RestController
    @RequestMapping("/user")
    public class UserController {
        @Autowired
        private UserService userService;
    
        @PostMapping("/page")
        public Result<IPage<UserVO>> pageQuery(@RequestBody UserDTO userDTO) {
            IPage<UserVO> page = userService.pageQuery(userDTO);
            return Result.success(page);
        }
    }
    
    
    1. 说明
    • 首先通过  DTO  接收前端的查询条件(用户名、页码、页大小)。
    • 然后使用  MyBatis - Plus  的  selectPage  方法进行分页查询,得到  Entity  类型的分页结果。
    • 最后将  Entity  列表转换为  VO  列表,并封装成分页对象返回给前端。这样就完成了从  DTO  接收参数,经  Entity  查询,到  VO  返回的整个流程。
    评论

报告相同问题?

问题事件

  • 创建了问题 11月26日