Mybatis中的游標(biāo)查詢Cursor(滾動(dòng)查詢)
需求
是實(shí)現(xiàn)滾動(dòng)查詢而不是分頁
用游標(biāo)查詢實(shí)現(xiàn)此需求
總體思路
滾動(dòng)查詢,往下拉滾動(dòng)條觸發(fā)請求,返回?cái)?shù)據(jù)并帶當(dāng)前下標(biāo),以備下次請求繼續(xù)往下查詢
①首先在dao層mapper文件中寫查詢方法
(下面的示例帶有查詢條件)
// 策略為向下滾動(dòng)
@Options(resultSetType = ResultSetType.FORWARD_ONLY)
@Select({"select * from task where status!=#{status} order by create_time desc"})
Cursor<Task> getTasksStatistic(Integer status);②在service層寫方法并在serviceimpl中實(shí)現(xiàn)
// TaskCursorVo是封裝類 TaskCursorVo getTaskStatus(Integer currentIndex, Integer pageSize);
public TaskCursorVo getTaskStatus(Integer currentIndex,Integer pageSize) {
TaskCursorVo taskCursorVo=new TaskCursorVo();
List<TaskStatusVo> collect=new ArrayList<>();
// 第一個(gè)參數(shù)為方法名,第二個(gè)參數(shù)是查詢條件的值(如果沒有查詢條件就寫null),第三個(gè)條件是從下標(biāo)為currentIndex的開始查pageSize條數(shù)據(jù)
Cursor<Task> tasksStatistic = sqlSessionTemplate.selectCursor("getTasksStatistic",DELETED.getCode(),new RowBounds(currentIndex,pageSize));
// 對(duì)結(jié)果進(jìn)行遍歷封裝
Iterator<Task> iterator = tasksStatistic.iterator();
while (iterator.hasNext()) {
Task task = iterator.next();
TaskStatusVo taskStatusVo = new TaskStatusVo();
BeanUtils.copyProperties(task, taskStatusVo);
taskStatusVo.setStatusName(Objects.requireNonNull(getByCode(task.getStatus())).getDesc());
collect.add(taskStatusVo);
}
taskCursorVo.setTaskStatusVos(collect);
// 需要把當(dāng)前下標(biāo)返回給前端
taskCursorVo.setCurrentIndex(tasksStatistic.getCurrentIndex());
Example e=new Example(Task.class);
Example.Criteria c = e.createCriteria().andNotEqualTo("status", DELETED.getCode());
List<Task> tasks = taskMapper.selectByExample(e);
// 把總條數(shù)查出來給前端
taskCursorVo.setTotalSize(tasks.size());
return taskCursorVo;
}③controller實(shí)現(xiàn)
@GetMapping("/taskStatus")
public ResultModel taskStatus(@RequestParam(defaultValue = "0") Integer currentIndex,@RequestParam(defaultValue = "20") Integer pageSize){
// 第一次默認(rèn)從第0條開始查詢20條,往后的前端會(huì)把上次請求返回的當(dāng)前下表傳過來
// 如果不是從第一次查詢,就要從上次查詢當(dāng)前下標(biāo)的下一條數(shù)據(jù)開始查詢
if (currentIndex!=0){
currentIndex+=1;
}
TaskCursorVo taskCursorVo = taskService.getTaskStatus(currentIndex, pageSize);
return ResultModel.success(taskCursorVo);
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot自動(dòng)配置原理及DataSource的應(yīng)用方式
這篇文章主要介紹了Springboot自動(dòng)配置原理及DataSource的應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
spring?cloud?gateway中netty線程池小優(yōu)化
這篇文章主要介紹了spring?cloud?gateway中netty線程池小優(yōu)化技巧示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
Java更新調(diào)度器(update scheduler)的使用詳解
Java更新調(diào)度器是Java中的一個(gè)特性,可以自動(dòng)化Java應(yīng)用程序的更新過程,它提供了一種方便的方式來安排Java應(yīng)用程序的更新,確保其與最新的功能、錯(cuò)誤修復(fù)和安全補(bǔ)丁保持同步,本文將深入介紹如何使用Java更新調(diào)度器,并解釋它對(duì)Java開發(fā)人員和用戶的好處2023-11-11
IDEA版使用Java操作Redis數(shù)據(jù)庫的方法
這篇文章主要介紹了IDEA版使用Java操作Redis數(shù)據(jù)庫的方法,首先需要下載jedis.jar包,然后再工程中設(shè)置具體操作步驟跟隨小編一起學(xué)習(xí)下吧2021-08-08
使用spring.profiles.active來分區(qū)配置的方法示例
這篇文章主要介紹了使用spring.profiles.active來分區(qū)配置的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01

