同时查询总条数和分页列表
在实际的开发过程中,我们经常会遇到分页查询,一般需要查询符合条件的总条数和某一页的列表数据
假设:
1.查询总条数用时:2秒
2.查询某一页的列表用时:3秒
如果顺序同步查询加起来需要 5 秒钟
而如果采用异步查询的只需要max(2,3)也就3秒钟,可以大大提高查询效率,下面来看代码实现,例子jdk8中的CompletableFuture可以轻松实现!
/** 本实例中的代码为部分代码,需要根据自己的业务调整 **/
public Map<String,Object> query(){
//查询一班的总人数
String countSql="select count(1) from student where class='1班' ";
//分页查询一班的前100人的信息
String listSql="select * from student where class='1班' limit 100 ";
//查询总个数线程
CompletableFuture<Long> countFuture = CompletableFuture.supplyAsync(() -> {
long c = (long)dao2._queryObject(countSql);
return c;
});
//查询分页的列表
CompletableFuture<List<Map<String,Object>>> listFuture = CompletableFuture.supplyAsync( () -> {
List<Map<String,Object>> list = dao2._queryMapList(listSql);
return list;
} );
//获取 count 和 list 组合成map 返回前台
try {
Map<String,Object> map = new HashMap<String,Object>(){{
put("count",countFuture.get());
put("list",listFuture.get());
}};
return map;
}catch (Exception e){
throw new RuntimeException(e);
}
}