基于grpc从零开始搭建一个准生产分布式应用(11) - 专题-查询分页

基于本框架中的封装实现的分页逻辑,用一个例子来说明,为了简单整体结构分为三层(controller、service、dao),省略掉了grpc。以下注释中有******的是和业务相关的写法,需自定义。

一、Controller

@Slf4j
@RestController
@RequestMapping("/datadbase")
public class DatabaseController {

    @Autowired
    private IDatabaseService iDatabaseService;

    /**分页查询数据库:
       参数:@RequestBody(required = false) PageParamReq page 中的required可省略,省略后默认为必填项
    */
    @PostMapping("/v1/page")
    public PageResponse> page(@RequestBody(required = false) PageParamReq page,
                                               @RequestParam(name = "name", required = false) String name,
                                               @RequestParam(name = "type", required = false) String type,
                                               @RequestParam(name = "status", required = false) String status) {
        
           //CommonVoTranslator和DatabaseVoTranslator是用MapStruct实现的实体转换类,固定写法
            PageBo  pageBo = iDatabaseService.pageSearch(CommonVoTranslator.INSTANCE.pageReq2PageQueryBo(page), name, type, status);
            
            //********转换Bo结果数据为Vo,需自定义转换类********
            List  databaseVos = DatabaseVoTranslator.INSTANCE.boToVos(pageBo.getData());
            
            //定义HTTP响应对象并,封装返回数据,固定写法
            PageResponse> response = PageUtil.convertPageBo(pageBo);
            response.setData(databaseVos);
            //返回给页面端
            return response;
    }

public interface DatabaseVoTranslator {
    DatabaseVoTranslator INSTANCE = Mappers.getMapper(DatabaseVoTranslator.class);

    DatabaseVo boToVo(DatabaseBo var1);
    List boToVos(List var1);

}

二、Service

public PageBo pageSearch(PageQueryBo pageParam, String dataBaseName, String dataBaseType, String status) {

        Integer dataBaseTypeV = null;
        Integer statusV = null;
        if(StrUtil.isNotEmpty(dataBaseType)){
            dataBaseTypeV = DataServerStructMapperUtil.getDataBaseType(dataBaseType);
        }
        if(StrUtil.isNotEmpty(status)){
            statusV = DataServerStructMapperUtil.getStatus(status);
        }

        //构建查询参数,固定写法
        IPage iPage = new Page<>(pageParam.getPageNum(), pageParam.getPageSize());
        
        //********查询数据********
        iPage = iDatabaseDao.pageDatabase(iPage, dataBaseName, dataBaseTypeV, statusV);

        //处理返回结果,固定写法
        PageBo reuslt = PageUtil.convertMyabtisIpage(iPage);
        
        //********转换Bo结果数据为Vo,需自定义转换类********
        List databaseBos =  DatabaseTranslator.INSTANCE.entityToBos(iPage.getRecords());
        reuslt.setData(databaseBos);
        return reuslt;
    }
public interface DatabaseTranslator {

    DatabaseTranslator INSTANCE = Mappers.getMapper(DatabaseTranslator.class);

    DatabaseBo entityToBo(DatabaseEntity var1);
    List entityToBos(List var1);

}

三、Dao

DAO实现中的Mapper为可选,一般没有特殊查询参数时可以直接硬编码的方式实现。

3.1、DAO

public IPage pageDatabase(IPage iPage, String name, Integer type, Integer status) {
        //********需自定义实现********
        IPage result = this.getBaseMapper().pageDatabase(iPage, name, type, status);
        return result;
    }

3.2、Mapper

public interface DatabaseMapper extends BaseMapper {
    IPage pageDatabase(IPage iPage,
                                       @Param("databaseName") String name,
                                       @Param("type") Integer type,
                                       @Param("status") Integer status);
}




    

你可能感兴趣的:(java,grpc,springboot)