1

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

 2 years ago
source link: https://blog.51cto.com/arch/5501386
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

原创

生而为人我很遗憾 2022-07-21 17:39:48 博主文章分类:java ©著作权

文章标签 自定义 数据 封装 分页 文章分类 Java 编程语言 阅读数143

基于本框架中的封装实现的分页逻辑,用一个例子来说明,为了简单整体结构分为三层(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<List<DatabaseVo>> 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) {
//slf4j日志输出
log.info("DatabaseArguments:"
+ "page" + JSONUtil.toJsonStr(page)
+ "name " + name
+ "type " + type
+ "status " + status);

try{
//CommonVoTranslator和DatabaseVoTranslator是用MapStruct实现的实体转换类,固定写法
PageBo<DatabaseBo> pageBo = iDatabaseService.pageSearch(CommonVoTranslator.INSTANCE.pageReq2PageQueryBo(page), name, type, status);

//********转换Bo结果数据为Vo,需自定义转换类********
List<DatabaseVo> databaseVos = DatabaseVoTranslator.INSTANCE.boToVos(pageBo.getData());

//定义HTTP响应对象并,封装返回数据,固定写法
PageResponse<List<DatabaseVo>> response = PageUtil.convertPageBo(pageBo);
response.setData(databaseVos);
//返回给页面端
return response;
} catch (AppException e) {
log.error(e.getMessage());
throw e;
}
}
public interface DatabaseVoTranslator {
DatabaseVoTranslator INSTANCE = Mappers.getMapper(DatabaseVoTranslator.class);

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

}

二、Service

public PageBo<DatabaseBo> 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<DatabaseEntity> iPage = new Page<>(pageParam.getPageNum(), pageParam.getPageSize());

//********查询数据********
iPage = iDatabaseDao.pageDatabase(iPage, dataBaseName, dataBaseTypeV, statusV);

//处理返回结果,固定写法
PageBo<DatabaseBo> reuslt = PageUtil.convertMyabtisIpage(iPage);

//********转换Bo结果数据为Vo,需自定义转换类********
List<DatabaseBo> 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<DatabaseBo> entityToBos(List<DatabaseEntity> var1);

}

三、Dao

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

3.1、DAO

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

3.2、Mapper

public interface DatabaseMapper extends BaseMapper<DatabaseEntity> {
IPage<DatabaseEntity> pageDatabase(IPage<DatabaseEntity> iPage,
@Param("databaseName") String name,
@Param("type") Integer type,
@Param("status") Integer status);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="XXXXXXXXXX.DatabaseMapper">

<select id="pageDatabase" resultType="XXXXXXXXXX.DatabaseEntity">
select
t_database.*
from
t_database
where 1=1
<if test = "databaseName!=null">
and upper(t_database.name) LIKE upper(CONCAT('%',#{databaseName},'%'))
</if>
<if test = "type!=null">
and t_database.type = #{type}
</if>
<if test = "status!=null">
and t_database.status = #{status}
</if>

</select>
</mapper>
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK