我是靠谱客的博主 激情季节,这篇文章主要介绍mybatis游标查询 org.apache.ibatis.cursor.Cursor,现在分享给大家,希望可以做个参考。

先说使用场景:针对超大数据,内存不够存储数据。

假设有一个1千万的日志数据,需要将这一千万的数据,全部都清洗一遍,从每一条的数据中查询出匹配的有效数据,且不能修改原始数据。

第一种办法

一次性查出来,内存不够,而且会很慢,不可取。这种方法就直接放弃。

第二种办法

分页查询, 每次查询1000条,每次处理完后,再分页查询。
这种分页查询,分页会很慢,除非是有索引id,通过顺序读取,还有可以优化一下。

第三种办法

游标查询 org.apache.ibatis.cursor.Cursor

数据库查询DAO

TempStudent 数据POJO

复制代码
1
2
3
4
@Select(" SELECT * FROM temp_student ") Cursor<TempStudent> findListForCursor();

查询的service

复制代码
1
2
3
4
5
6
7
8
9
@Transactional public void scanTempStudent() { Cursor<TempStudent> cursor = tempStudentDao.findListForCursor(); cursor.forEach(foo -> { System.out.println(foo.getId() + ":" + foo.getName()); }); }

特别注意,需要加上一个注解 Transactional, 事物的注解
为什么呢?
在取数据的过程中需要保持数据库连接,而 Mapper 方法通常在执行完后连接就关闭了,因此 Cusor 也一并关闭了,所以加上了事物保障就可以

Spring 框架当中注解使用的坑:只在外部调用时生效。在当前类中调用这个方法,依旧会报错。

最后

以上就是激情季节最近收集整理的关于mybatis游标查询 org.apache.ibatis.cursor.Cursor的全部内容,更多相关mybatis游标查询内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(103)

评论列表共有 0 条评论

立即
投稿
返回
顶部