Mybatis中的游标查询Cursor(滚动查询)

 更新时间:2024年01月27日 09:33:34   作者:miraitowa.cn  
这篇文章主要介绍了Mybatis中的游标查询Cursor(滚动查询),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

需求

是实现滚动查询而不是分页

用游标查询实现此需求

总体思路

滚动查询,往下拉滚动条触发请求,返回数据并带当前下标,以备下次请求继续往下查询

①首先在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中实现

// TaskCursorVo是封装类
TaskCursorVo getTaskStatus(Integer currentIndex, Integer pageSize);
public TaskCursorVo getTaskStatus(Integer currentIndex,Integer pageSize) {
        TaskCursorVo taskCursorVo=new TaskCursorVo();
        List<TaskStatusVo> collect=new ArrayList<>();
// 第一个参数为方法名,第二个参数是查询条件的值(如果没有查询条件就写null),第三个条件是从下标为currentIndex的开始查pageSize条数据
        Cursor<Task> tasksStatistic = sqlSessionTemplate.selectCursor("getTasksStatistic",DELETED.getCode(),new RowBounds(currentIndex,pageSize));
// 对结果进行遍历封装
        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);
// 需要把当前下标返回给前端
        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);
// 把总条数查出来给前端
        taskCursorVo.setTotalSize(tasks.size());
        return taskCursorVo;
    }

③controller实现

@GetMapping("/taskStatus")
    public ResultModel taskStatus(@RequestParam(defaultValue = "0") Integer currentIndex,@RequestParam(defaultValue = "20") Integer pageSize){
// 第一次默认从第0条开始查询20条,往后的前端会把上次请求返回的当前下表传过来
// 如果不是从第一次查询,就要从上次查询当前下标的下一条数据开始查询
        if (currentIndex!=0){
            currentIndex+=1;
        }
        TaskCursorVo taskCursorVo = taskService.getTaskStatus(currentIndex, pageSize);
        return ResultModel.success(taskCursorVo);
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot 自动配置之条件注解浅析

    Spring Boot 自动配置之条件注解浅析

    这篇文章主要介绍了Spring Boot 自动配置之条件注解浅析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Mybatis plus通用字段自动填充的示例

    Mybatis plus通用字段自动填充的示例

    这篇文章主要介绍了Mybatis plus通用字段自动填充的示例,帮助大家更好的理解和使用Mybatis,感兴趣的朋友可以了解下
    2021-01-01
  • Java8函数式接口Predicate用法示例详解

    Java8函数式接口Predicate用法示例详解

    这篇文章主要为大家介绍了Java8函数式接口Predicate用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 浅析SpringBoot2.4 静态资源加载问题

    浅析SpringBoot2.4 静态资源加载问题

    这篇文章主要介绍了SpringBoot2.4 静态资源加载问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Java异常类型介绍及处理方法

    Java异常类型介绍及处理方法

    这篇文章介绍了Java异常类型介绍及处理方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • 详解springmvc 中controller与jsp传值

    详解springmvc 中controller与jsp传值

    本篇文章主要介绍了springmvc 中controller与jsp传值,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 自定义log4j日志文件命名规则说明

    自定义log4j日志文件命名规则说明

    这篇文章主要介绍了自定义log4j日志文件命名规则说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • fastjson序列化时间自定义格式示例详解

    fastjson序列化时间自定义格式示例详解

    这篇文章主要为大家介绍了fastjson序列化时间自定义格式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Swagger的使用教程详解

    Swagger的使用教程详解

    Swagger是一个强大的API文档工具,它能够简化API文档的编写和维护工作,提供了一种方便的方式来描述、展示和测试RESTful风格的Web服务接口,本文介绍了Swagger的安装配置和使用方法,并提供了示例代码,感兴趣的朋友一起学习吧
    2023-06-06
  • spring boot redis中的key失效监听的问题解决

    spring boot redis中的key失效监听的问题解决

    本文主要介绍了spring boot redis中的key失效监听的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07

最新评论