code5代码-分页

84 阅读3分钟

image.png

image.png

-   项目中Mapper方法必须功能单一,参数明确,拒绝两种以上的持久逻辑使用同一个Mapper方法

    项目中每层都是通过接口调用Controller->Service->Mapper

<!---->

-   明确类定义:明确哪些是重用类,哪些是需要新增的类
-   明确主键规则:确认操作表的ID生成规则,是Mycat主键,还是Zk主键
-   Mapper实现:查、改、删时注意是否使用mycat注解确认DN,插入时是否要插入主键id
-   Service实现:可用通过时序图帮助我们梳理实现逻辑
-   Controller实现:简单的Service层调用
-   单元测试或接口测试
js减少join,单表查询比关联查询速度要快。某个访问频繁的字段可以冗余存放在两张表里,不用关联了。
maven ---直接放到f盘
API文档 ,编写由后端编写,包括:接口名称,接口描述,请求方式、请求路径、参数、返回值、返回状态
PageRequestDto通用分页.
## 对象类型
PO 和数据库表一对一,与数据库有关
VO 用来显示数据,与数据库无关
DTO 数据传输对象,可以用来接收数据,也可以用来返回数据,与数据库无关
  adchannel比如数据显示用,传给前端时不显示身份证字段,ChannelDto可以从前端返回的数据的基础上增加几个数据
   adchannel只能admin用,不能其他微服务用,则用ChannelDto都依赖于model可以远程调用

分页

PageResult<T> extends ResponseResult ,extend继承了父类就拥有ResponseResult的参数
分页返回对象是啥泛型就是啥   使用dto对象--前端请求参数,服务端返回给前端的数据也需要转成Dto在返回    
1在admin中新建controller.v1文件
2common.dtos.三个类 .PageRequestDto  PageResult  ResponseResult pagerequestdeto   
3leadnews_admin  pom.xml  ### application.yml   
 1   @RestController
@RequestMapping("/api/v1/channel")
public class ChannelController { 
    @Autowired
    private AdChannelService channelService;   
    public PageResult<AdChannel> findByPage(@RequestBody ChannelDto dto){
        return channelService.findByPage(dto);--把dto传进来
       直接返回pageresult
    }
}
2    ChannelDto这个dto既用来接收前端传递的参数,因为需要分页查询,要继承PageRequestDto
持久层 在com.heima.admin.mapper包下定义接口
    public interface AdChannelMapper extends BaseMapper<AdChannel> {
}  
3在com.heima.admin.service包下定义业务层接口
public interface AdChannelService extends IService<AdChannel> {
  根据名称分页查询频道列表 PageResult<ChannelDto> findByPage(ChannelDto dto);
}    
4实现类com.heima.admin.service.impl.AdChannelServiceImpl
    分页查询   page分页条件 queryWrapper查询条件
        IPage<AdChannel> channelIPage分页结果= = page(ipage, queryWrapper);
//        构造分页条件 查哪张表就写哪个实体类<AdChannel> 
        当前页码channelDto.getPage(),显示条数channelDto.getSize()
    IPage<AdChannel> ipage = new Page<>(dto.getPage(),dto.getSize());   
非必传     设置查询构造查询条件<AdChannel>泛型--AdChannel::getName
     LambdaQueryWrapper<AdChannel> queryWrapper = new LambdaQueryWrapper();
 StringUtils是common langs的包
     如果dto.getName()不为空则查AdChannel::getNam
     queryWrapper.like(StringUtils.isNotBlank(dto.getName()),AdChannel::getName,dto.getName());
根据名字查不一定能查到 如果没有返回值  当前页码channelDto.getPage(),显示条数channelDto.getSize()
getRecords()分页结果    
        if(CollectionUtils.isEmpty(channelIPage.getRecords())){
            throw new LeadException(AppHttpCodeEnum.CHANNEL_NOT_FOUND);
        }
否则返回PageResult   channelIPage Total Records从分页结果中拿
 return new PageResult<>(dto.getPage(),
                dto.getSize(),
                channelIPage.getTotal(),
                channelIPage.getRecords());

@Service
public class AdChannelServiceImpl extends ServiceImpl<AdChannelMapper, AdChannel> implements AdChannelService { 
     * 分页查询频道  @return 
    @Override
    public PageResult<AdChannel> findByPage(ChannelDto dto) { 
        IPage<AdChannel> ipage = new Page<>(dto.getPage(),dto.getSize()); 
        LambdaQueryWrapper<AdChannel> queryWrapper = new LambdaQueryWrapper();  queryWrapper.like(StringUtils.isNotBlank(dto.getName()),AdChannel::getName,dto.getName());  
        IPage<AdChannel> channelIPage = = page(ipage, queryWrapper);  
        if(CollectionUtils.isEmpty(channelIPage.getRecords())){
            throw new LeadException(AppHttpCodeEnum.CHANNEL_NOT_FOUND);
        }

        return new PageResult<>(dto.getPage(),
                dto.getSize(),
                channelIPage.getTotal(),
                channelIPage.getRecords());
    }   
}