Mybatis中的游標(biāo)查詢Cursor(滾動(dòng)查詢)
更新時(shí)間:2024年01月27日 09:33:34 作者:miraitowa.cn
這篇文章主要介紹了Mybatis中的游標(biāo)查詢Cursor(滾動(dòng)查詢),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
需求
是實(shí)現(xiàn)滾動(dòng)查詢而不是分頁(yè)
用游標(biāo)查詢實(shí)現(xiàn)此需求
總體思路
滾動(dòng)查詢,往下拉滾動(dòng)條觸發(fā)請(qǐng)求,返回?cái)?shù)據(jù)并帶當(dāng)前下標(biāo),以備下次請(qǐng)求繼續(xù)往下查詢
①首先在dao層mapper文件中寫(xiě)查詢方法
(下面的示例帶有查詢條件)
// 策略為向下滾動(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層寫(xiě)方法并在serviceimpl中實(shí)現(xiàn)
// TaskCursorVo是封裝類(lèi) 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ù)是查詢條件的值(如果沒(méi)有查詢條件就寫(xiě)null),第三個(gè)條件是從下標(biāo)為currentIndex的開(kāi)始查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ù)查出來(lái)給前端
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條開(kāi)始查詢20條,往后的前端會(huì)把上次請(qǐng)求返回的當(dāng)前下表傳過(guò)來(lái)
// 如果不是從第一次查詢,就要從上次查詢當(dāng)前下標(biāo)的下一條數(shù)據(jù)開(kāi)始查詢
if (currentIndex!=0){
currentIndex+=1;
}
TaskCursorVo taskCursorVo = taskService.getTaskStatus(currentIndex, pageSize);
return ResultModel.success(taskCursorVo);
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java8函數(shù)式接口Predicate用法示例詳解
這篇文章主要為大家介紹了Java8函數(shù)式接口Predicate用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
淺析SpringBoot2.4 靜態(tài)資源加載問(wèn)題
這篇文章主要介紹了SpringBoot2.4 靜態(tài)資源加載問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
spring?boot?redis中的key失效監(jiān)聽(tīng)的問(wèn)題解決
本文主要介紹了spring?boot?redis中的key失效監(jiān)聽(tīng)的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07

