基于grpc从零开始搭建一个准生产分布式应用(11) - 专题-查询分页
2024-01-02 16:25:26
基于本框架中的封装实现的分页逻辑,用一个例子来说明,为了简单整体结构分为三层(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) {
//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;
}
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>
文章来源:https://blog.csdn.net/liudonglovehemin/article/details/135341111
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!