Mybatis中的游標(biāo)查詢Cursor(滾動查詢)
更新時間:2024年01月27日 09:33:34 作者:miraitowa.cn
這篇文章主要介紹了Mybatis中的游標(biāo)查詢Cursor(滾動查詢),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
需求
是實現(xiàn)滾動查詢而不是分頁
用游標(biāo)查詢實現(xiàn)此需求
總體思路
滾動查詢,往下拉滾動條觸發(fā)請求,返回數(shù)據(jù)并帶當(dāng)前下標(biāo),以備下次請求繼續(xù)往下查詢
①首先在dao層mapper文件中寫查詢方法
(下面的示例帶有查詢條件)
// 策略為向下滾動 @Options(resultSetType = ResultSetType.FORWARD_ONLY) @Select({"select * from task where status!=#{status} order by create_time desc"}) Cursor<Task> getTasksStatistic(Integer status);
②在service層寫方法并在serviceimpl中實現(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<>(); // 第一個參數(shù)為方法名,第二個參數(shù)是查詢條件的值(如果沒有查詢條件就寫null),第三個條件是從下標(biāo)為currentIndex的開始查pageSize條數(shù)據(jù) Cursor<Task> tasksStatistic = sqlSessionTemplate.selectCursor("getTasksStatistic",DELETED.getCode(),new RowBounds(currentIndex,pageSize)); // 對結(jié)果進行遍歷封裝 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實現(xiàn)
@GetMapping("/taskStatus") public ResultModel taskStatus(@RequestParam(defaultValue = "0") Integer currentIndex,@RequestParam(defaultValue = "20") Integer pageSize){ // 第一次默認(rèn)從第0條開始查詢20條,往后的前端會把上次請求返回的當(dāng)前下表傳過來 // 如果不是從第一次查詢,就要從上次查詢當(dāng)前下標(biāo)的下一條數(shù)據(jù)開始查詢 if (currentIndex!=0){ currentIndex+=1; } TaskCursorVo taskCursorVo = taskService.getTaskStatus(currentIndex, pageSize); return ResultModel.success(taskCursorVo); }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot自動配置原理及DataSource的應(yīng)用方式
這篇文章主要介紹了Springboot自動配置原理及DataSource的應(yīng)用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07spring?cloud?gateway中netty線程池小優(yōu)化
這篇文章主要介紹了spring?cloud?gateway中netty線程池小優(yōu)化技巧示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07Java更新調(diào)度器(update scheduler)的使用詳解
Java更新調(diào)度器是Java中的一個特性,可以自動化Java應(yīng)用程序的更新過程,它提供了一種方便的方式來安排Java應(yīng)用程序的更新,確保其與最新的功能、錯誤修復(fù)和安全補丁保持同步,本文將深入介紹如何使用Java更新調(diào)度器,并解釋它對Java開發(fā)人員和用戶的好處2023-11-11IDEA版使用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ū)配置的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01