码农知识堂 - 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)
    	来解决内存占用过大的问题
  • 相关阅读:
    提高数据研究效率,优化成果分享及复用|ModelWhale 版本更新
    一起Talk Android吧(第四百一十回:绘制曲线)
    PMP 11.27 考试倒计时15天!冲刺啦!
    java毕业设计花苑物业综合服务平台mybatis+源码+调试部署+系统+数据库+lw
    在Android Studio中连接字符串之前添加@SuppressLint(“settexti18n”)注释
    21.8 Python 使用BeautifulSoup库
    NLP - GIZA++ 实现词对齐
    QT 集成MQTT过程
    【老生谈算法】matlab实现蒙特卡罗定积分源码——蒙特卡罗定积分
    Centos7 docker 容器内root身份应用自启动 & /usr/sbin/init 问题
  • 原文地址: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号