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);
    }

总结

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

相关文章

  • kotlin改善java代码实例分析

    kotlin改善java代码实例分析

    我们给大家整理了关于kotlin改善java代码的相关实例以及操作的详细方法,有需要的读者们参考下。
    2018-03-03
  • java SelectableChannel的使实例用法讲解

    java SelectableChannel的使实例用法讲解

    在本篇文章里小编给大家整理的是一篇关于java SelectableChannel的使实例用法讲解内容,有兴趣的朋友们可以学习下。
    2021-03-03
  • java通过poi解析word入门的操作方法

    java通过poi解析word入门的操作方法

    Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目,可以使用POI在Java程序中对Miscrosoft Office各种文件进行读写操作,本文给大家介绍java通过poi解析word入门的操作方法,感兴趣的朋友一起看看吧
    2024-08-08
  • Spring中@PathVariable注解的简单使用

    Spring中@PathVariable注解的简单使用

    这篇文章主要介绍了Spring中@PathVariable注解的简单使用,@PathVariable 是 Spring Framework 中的注解之一,用于处理 RESTful Web 服务中的 URL 路径参数,它的作用是将 URL 中的路径变量绑定到方法的参数上,需要的朋友可以参考下
    2024-01-01
  • 使用Java实现创建Excel表单控件

    使用Java实现创建Excel表单控件

    在数据填报时,创建Excel表单控件是一项常见的任务,它可以极大地简化数据收集和处理的过程,本文主要介绍了如何使用Java实现创建Excel表单控件,感兴趣的可以了解下
    2024-03-03
  • Java中double精度丢失问题原因及解决办法

    Java中double精度丢失问题原因及解决办法

    使用Java double进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1,这篇文章主要给大家介绍了关于Java中double精度丢失问题原因及解决办法,需要的朋友可以参考下
    2024-01-01
  • Java AbstractMethodError案例分析详解

    Java AbstractMethodError案例分析详解

    这篇文章主要介绍了Java AbstractMethodError案例分析详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 分享java中设置代理的两种方式

    分享java中设置代理的两种方式

    有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http、https、ftp、socks代理。比如在IE浏览器设置代理,这里简单介绍下,需要的朋友可以参考下
    2015-12-12
  • HandlerMapping之RequestMappingHandlerMapping作用详解

    HandlerMapping之RequestMappingHandlerMapping作用详解

    这篇文章主要介绍了HandlerMapping之RequestMappingHandlerMapping作用详解,HandlerMapping是用来寻找Handler的,并不与Handler的类型或者实现绑定,而是根据需要定义的,那么为什么要单独给@RequestMapping实现一个HandlerMapping,需要的朋友可以参考下
    2023-10-10
  • Java 详解分析链表的中间节点

    Java 详解分析链表的中间节点

    链表是基本的数据结构之一,面试题中链表占很大一部分,可见链表操作是非常重要的。本篇文章我们来探究一下如何获取链表的中间节点
    2022-01-01

最新评论