hbase 分页小例子,相比于PageFilter的话,效率要高(ps:这个效率高,是指设计的表rowkey很合理)
public List<Map<String, String>> getKkListLnHbaseNew(String begin, String end, int startRow, int limit) {
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
String key = hphm + "-" + hpzl;
Scan scan = new Scan();
scan.setReversed(true);// 倒序查询
scan.setStartRow(Bytes.toBytes(key + '-' + end)); // 每次调用都不变
scan.setStopRow(Bytes.toBytes(key + '-' + begin)); // 每次调用都不变
int index = 0;
int count = 0;
boolean hasNext = false;
if (limit < 0) {
limit = 0;
}
int stopRow = startRow + limit;
try {
List<Result> scanner = htableHelper.getScanner(PcsConfig.getPcsConfig("passcar-tableNew"), scan);
for (Result rs : scanner) {
if (index++ < startRow) { // startRow 作用就是跳过多少条,每次调用会是limit的倍数
// 设置下限
continue;
}
if (index > stopRow) {
// 设置上限
hasNext = true;// 若能运行到此处,则说明实际数据要比limit设置的数据多
break;
}
Map<String, String> map = HTableHelper.getInstance().toMap(rs);
if (null != map && map.size() > 0) {
if (KKSet.containsKey(map.get("DWBH"))) {
map.put("KKMC", KKSet.get(map.get("DWBH")).get("KKMC").toString());
}
map.put("ROWKEY", Bytes.toString(rs.getRow()));
map.put("RKSJ", String.valueOf(rs.rawCells()[0].getTimestamp()));
list.add(map);
}
count += 1;
}
} catch (IOException e) {
log.error("异常:", e);
}
if (list.size() == 0) {
list.add(new HashMap<String, String>());
}
list.get(0).put("count", String.valueOf(count));
list.get(0).put("hasNext", hasNext ? "1" : "0");
return list;
}