码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Mybatis如何使用游标呢?


    转自:

    Mybatis如何使用游标呢?

    下文笔者讲述Mybatis中使用游标的方法分享,如下所示

    游标简介

    游标(Cursor):
       处理数据的一种方法
       查看或处理结果集中的数据
        游标提供在结果集中一次一行或
    	多行前进或向后浏览数据的能力
    

    例:

    // 第一种
    @Options(resultSetType = ResultSetType.FORWARD_ONLY)
    @Select("SELECT * FROM users WHERE status = 0")
    List queryUserAll();
     
    // 第二种 在Mybatis-3.4.0版本中,不支持@select注解,在3.4.1版本中已经修复:
    @Options(resultSetType = ResultSetType.FORWARD_ONLY)
    @Select("SELECT * FROM users WHERE status = 0")
    Cursor cursorQueryUserAll();
    @Service
    public class UserServiceImpl implements UserService {
     
        private static final Logger LOG = LoggerFactory.getLogger(UserServiceImpl.class);
     
        @Autowired
        private UserDao userDao;
     
        @Autowired
        private SqlSessionTemplate sqlSessionTemplate;
     
        public List getUserList(UserSearchParam param) {
            Cursor cursor = null;
            SqlSession sqlSession = null;
            try {
                sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession();
                cursor = sqlSession.selectCursor(UserDao.class.getName() + ".queryUserAll");
                cursor.forEach(e -> {
                    // 处理逻辑
                });
               // 也可以使用迭代器:Iterator iterator = cursor.iterator();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != cursor) {
                    try {
                        cursor.close();
                    } catch (Exception e) {
                        LOG.error(e.getMessage(), e);
                    }
                }
                if (null != sqlSession) {
                    try {
                        sqlSession.close();
                    } catch (Exception e) {
                        LOG.error(e.getMessage(), e);
                    }
                }
            }
        }
    }
     
    
    各参数说明:
         ResultSet.TYPE_FORWORD_ONLY:
    	    结果集的游标只能向下滚动。
         ResultSet.TYPE_SCROLL_INSENSITIVE:
    	    结果集的游标可以上下移动,
    		 当数据库变化时,当前结果集不变
         ResultSet.TYPE_SCROLL_SENSITIVE:
    	    返回可滚动的结果集,当数据库变化时,当前结果集同步改变
    
       注意事项:
          游标是可以前后移动的
        当resultSetType = TYPE_SCROLL_INSENSITIVE,就是设置游标就可以前后移动
    	Mybatis为了保证可以前后移动,Mybatis会把之前查询的数据一直保存在内存中
    	所以不能彻底解决OOM的异常,所以我们这里需要设置为@Options(resultSetType = ResultSetType.FORWARD_ONLY)
    	(其实默认就是ResultSetType.FORWARD_ONLY)
    	来解决内存占用过大的问题
  • 相关阅读:
    docker-compose快速搭建Zookeeper集群
    Leetcode(81)——搜索旋转排序数组 II
    【JVM】垃圾回收机制
    零基础入门数据挖掘——二手车交易价格预测:baseline
    【微机接口】串行通信基础
    记一次 Nuxt 3 在 Windows 下的打包问题
    2022年11月2日 matlab 中@函数的用法
    Bipartite graph
    复变函数与积分变换中的英汉单词对照
    大话Stable-Diffusion-Webui-客制化主题(一)
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/128128052
    • 最新文章
    • 攻防演习之三天拿下官网站群
      数据安全治理学习——前期安全规划和安全管理体系建设
      企业安全 | 企业内一次钓鱼演练准备过程
      内网渗透测试 | Kerberos协议及其部分攻击手法
      0day的产生 | 不懂代码的"代码审计"
      安装scrcpy-client模块av模块异常,环境问题解决方案
      leetcode hot100【LeetCode 279. 完全平方数】java实现
      OpenWrt下安装Mosquitto
      AnatoMask论文汇总
      【AI日记】24.11.01 LangChain、openai api和github copilot
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
    正则表达式工具 cron表达式工具 密码生成工具

    京公网安备 11010502049817号