1.分页查询
@Entity层
public class GetTableFieldQuery {
@ApiModelProperty(value = "索引名称",required = true)
@NotNull(message = "索引名称不能为空")
private String index_name;
@ApiModelProperty(value = "当前页", example = "1")
private Integer page;
@ApiModelProperty(value = "每页多少条", example = "10")
private Integer size;
public Integer getPage() {
return this.page != null ? this.page : 1;
}
public Integer getSize() {
return this.size != null ? this.size : 10;
}
}
@Impl层
@Override
public Result<List<TableFieldVO>> getTableFieldById(GetTableFieldQuery getTableFieldQuery) {
//PageHelper.startPage相当于开启分页,通过拦截MySQL的方式,把你的查询语句拦截下来加limit.
PageHelper.startPage(getTableFieldQuery.getPage(), getTableFieldQuery.getSize());
//查询语句一定放到这个PageHelper.startPage的后面进行执行。这样才能用到拦截功能
List<TableFieldVO> tableFieldById = dataAssuranceMapper.getTableFieldById(getTableFieldQuery.getIndex_name());
PageInfo<TableFieldVO> pageInfo=new PageInfo<>(tableFieldById);
return Result.success(tableFieldById, Long.valueOf(pageInfo.getTotal()).intValue());
}
2.二级菜单
理解
1.首先查询父级菜单,也就是parent_id均为0的List
2.通过回显的parent_id为0的List,获取其中table_id来作为子菜单的关联条件,判断id相同的List添加到父级菜单中,如下视图与代码。
@Override
public Result<List<DataMenuVO>> getDataMenu() {
List<Map<String,Object>> listMap = new ArrayList<>();
//查询都为parent为0的id 然后循环一个新的Map中
List<DataMenuVO> dataMenuFather = dataAssuranceMapper.getDataMenuFather();
for(DataMenuVO dataMenuVO:dataMenuFather) {
HashMap<String, Object> fatherMap = Maps.newHashMap();
fatherMap.put("table_id",dataMenuVO.getTableId());
fatherMap.put("table_name",dataMenuVO.getTableName());
//每次都查找与父级菜单相同的id 再添加到父级map中
List<DataMenuVO> menuSonListByFatherId = dataAssuranceMapper.getMenuSonListByFatherId(dataMenuVO.getTableId());
fatherMap.put("menuSon",menuSonListByFatherId);
//加入List<Map>中
listMap.add(fatherMap);
}
return Result.success(listMap);
}
需求:查看每个索引中总共有多少条数据 累计相加 给前端做统计 我目前只会for循环 Stream还不是很熟练...
//查看表数量
request = new Request("GET", "_cat/indices?v&h=idx,docs.count");
Response response = elasticTemplate.request(request, restHighLevelClient);
//去除空格
split = EntityUtils.toString(response.getEntity()).split("\n");
//key为索引 value为count数目
final Map<String, String> indexCountMap = Stream.of(split).map(e -> Arrays.stream(e.split(" ")).filter(f -> (!"".equals(f))).toArray(String[]::new)).collect(Collectors.toMap(e -> e[0], e -> e[1]));
//copy到一个新的list中 属性少好观察
List<DataDetailVO> indexList = new ArrayList<>();
DataDetailVO dataDetailVO;
for (IsSearchTableDTO isSearchTableDTO : isSearchTableDTOs) {
dataDetailVO = new DataDetailVO();
//复制value
BeanUtils.copyProperties(isSearchTableDTO, dataDetailVO);
indexList.add(dataDetailVO);
}
for (DataDetailVO d:indexList){
for (String key : indexCountMap.keySet()) {
if (key.equals(d.getIndexName())){
d.setCountSum(indexCountMap.get(key));
}
}
}
Integer integer = 0;
for (DataDetailVO d:indexList){
integer = integer + Integer.parseInt(Optional.ofNullable(d.getCountSum()).orElse("0"));
}
HashMap<String, Object> map = Maps.newHashMap();
map.put("Total data volume",integer);