Mybatis的Transaction、session、Connection,Oracle的Session的关系

MyBatis流式查询实战:解决大数据查询OOM问题 最近在做一个数据报表导出的功能,业务方要求能导出近一年的订单明细。开发时图省事,直接写了个 SELECT * FROM orders WHERE create_time BETWEEN ... ,然后在 Service 层用 List<Order> 接收。本地测试时数据量小,一切正常。结果上线后,运营在后台一点“导出”,服务内存直接飙到 90%+,紧接着就是一连串的 OutOfMemoryError: Java heap space 告警,服务差点挂掉。 事后复盘,一张大表几百万条记录,用 Li 阅读详情

这几天翻了一下Mybatis的代码,翻之前在网上找了一下,也没找到标题的合适的答案,在这里做个总结吧。

Mybatis的Connection对应的是Oracle的session

mybatis的一个connection对应一个数据库的长链接,就是oracle的session,即通过show v$session查看的链接。

Mybatis的session是申请一个connection,基于connection的一次会话操作(或是占用)

翻看代码,首先SqlSession是mybatis的类,不是jdbc的类,SqlSession的操作基本都是基于java.sql.Connection的API的操作。openSession和closeSession,可以理解是一个打标的操作并开启或关闭ResultSet等,在连接池中获取链接和归还链接。
SqlSession:
jdbc没有session
SqlSession.close

myBatis的session.close
关闭ResultSet:
调用Jdbc关闭ResultSet

Mybatis的一个Session上可以多个Transaction,也可以没有Transaction,一个Transaction不能跨Session。

事务是基于数据库的事务实现,要符合ACID
Transaction从Connection获取到的

MyBatis核心原理与Spring Boot集成实战:从SQL映射到动态SQL 在Java后端开发中,数据持久化是构建稳定应用的核心基础。从基础的JDBC到全自动ORM框架,技术演进始终围绕如何平衡开发效率与执行控制力。MyBatis作为一款半自动的持久层框架,其核心原理在于将SQL控制权交还开发者,同时通过智能的结果集映射消除JDBC的模板代码。这一设计带来了显著的技术价值:开发者可以编写和优化原生SQL,充分利用数据库特性,并借助动态SQL能力安全、灵活地构建复杂查询条件。在互联网、金融等对数据库性能有严苛要求的应用场景中,这种“SQL-Mapping”模式成为事实标准。本文通过S 阅读详情

相关推荐

MyBatis核心解析:从SQL映射到高性能Java数据库操作实践

在Java企业级开发中,持久层框架是连接应用与数据库的关键组件,其核心价值在于简化数据访问逻辑并提升开发效率。MyBatis作为一款半自动化的SQL映射框架,通过将SQL语句与Java代码解耦,实现了灵活性与控制力的平衡。其工作原理基于JDBC封装,通过XML或注解配置SQL映射,自动处理参数设置与结果集封装,显著减少了冗余代码。这一技术方案特别适用于需要精细控制SQL、追求高性能的复杂查询场景,例如电商交易系统与金融数据处理平台。在实际工程实践中,MyBatis的动态SQL能力与批量操作优化,能够有效应对

weixin_34268310的博客 365

解析Mybatis之Sqlsession、Connection和Transaction原理与三者间的关系

解析Mybatis之Sqlsession、Connection和Transaction原理与三者间的关系

global_coding的博客 1117

MyBatis流式查询实战:千万级数据导出与性能优化指南

在处理海量数据时,传统的一次性加载到内存的查询方式极易引发内存溢出(OOM)和性能瓶颈。其核心原理在于JDBC默认会将整个结果集传输到应用端,当数据量达到百万甚至千万级时,对JVM堆内存和数据库连接造成巨大压力。流式查询技术通过改变数据获取范式,实现了类似迭代器的逐条或分批数据拉取,从而将内存占用保持在极低水平,其技术价值在于以可控的时间开销换取确定性的空间安全。这一特性使其在数据导出、ETL同步、实时报表生成等需要处理全量结果集但无需一次性展示的场景中成为必选方案。本文聚焦于**MyBatis流式查询**

weixin_30920597的博客 485

mybatis中sqlsession/Executor/Connection/连接池的关系

1、sqlsession是由SqlSessionFactory(SqlSessionFactory一旦被创建就在应用的运行期间一直存在)创建,在跟spring结合以前sqlsession实际是由SqlSessionManager创建管理,在spring中mybatis专门有个类SqlSessionTemplate替代SqlSessionManager的工作。 SqlSessionTemplate是单例的,并且实现的是SqlSession, DisposableBean接口,可以将SqlSessionTemp

u011649691的博客 3841

MyBatis流式查询实战:解决大数据查询OOM,实现高效内存管理

在Java企业级应用开发中,数据库查询性能优化是核心技术挑战之一。当查询返回海量数据时,传统的一次性加载方式极易引发JVM内存溢出(OOM),导致服务崩溃。其原理在于JDBC默认会将整个结果集加载至应用内存。为解决此问题,MyBatis框架提供了流式查询(Streaming Query)技术,它通过控制JDBC的fetchSize和结果集类型,实现数据分批传输与处理,将内存占用从与数据量线性相关降至常数级别。这项技术的核心价值在于保障系统稳定性,避免因大数据量查询导致的服务中断。它尤其适用于数据导出、ETL

weixin_30883311的博客 404

SSM框架整合实战:构建企业级JavaWeb应用

SSM框架(SpringMVC+Spring+MyBatis)是JavaWeb开发的主流技术栈组合,通过MVC分层架构实现业务逻辑与表现层的解耦。其核心原理基于Spring的IoC容器管理组件依赖,MyBatis的ORM映射处理数据持久化,配合SpringMVC的请求分发机制构建完整Web体系。该技术组合在电商系统、ERP等企业级应用中具有显著优势,支持高并发事务处理与复杂业务场景。本文以MySQL/Oracle双数据库支持为例,详解SSM框架整合过程中的动态数据源配置、MyBatis二级缓存优化等工程实践

aibi9196的博客 452

Mybatis引出的一系列问题-Sqlsession、Connection的关系

sqlsession是由SqlSessionFactory(SqlSessionFactory一旦被创建就在应用的运行期间一直存在)创建,在跟spring结合以前sqlsession实际是由SqlSessionManager创建管理。Connection对象是和数据库建立的通信连接对象,执行sql的底层逻辑就要通过Connection对象实现。sqlSession实际是每个线程都会创建一个,生命周期依附于其调用线程。Executor:sqlSession执行sql的执行器。

一个搬砖工人 822

Hibernate SessionFactory 核心原理与生产级配置指南

SessionFactory 是 Hibernate 运行时的元数据中枢,承载映射定义、SQL 方言编译、二级缓存注册与连接适配等关键能力。其本质并非简单对象工厂,而是不可变、线程安全的运行时真相源——所有 Session 均为其影子副本。正确理解 getCurrentSession 与 openSession 的生命周期契约,是规避懒加载异常、连接泄漏和事务不一致的前提;而 openStatelessSession 则代表极致轻量的数据搬运范式。在高并发、微服务与批处理场景下,SessionFactory

weixin_34290631的博客 441

Mybatis之Sqlsession、Connection和Transaction三者间的关系

最近在看mybatis的源码,搜到这篇文章Sqlsession、Connection和Transaction原理与三者间的关系,debug之后发现有不少疑惑,于是按照原文整理了一下,记录下debug中的一些困惑点。Mybatis。

meser88的博客 4399

Flutter蓝牙开发实战:flutter_blue_plus核心功能与实现原理剖析

本文深入剖析了Flutter蓝牙开发插件flutter_blue_plus的核心功能与实现原理。文章从源码解析入手,详细讲解了蓝牙状态管理、设备扫描、GATT连接、服务发现以及数据读写等关键流程的实现机制,并分享了实战中的性能调优与常见问题解决方案,帮助开发者高效构建跨平台蓝牙应用。

weixin_29014237的博客 444

基于Lumerical FDTD的光栅耦合器宽带特性仿真与实验验证

本文详细介绍了基于Lumerical FDTD软件对光栅耦合器进行宽带特性仿真的完整流程。通过复现一个针对1310nm波段优化的经典光栅耦合器案例,文章从结构建模、光源设置、监视器布置到仿真运行与结果分析,逐步解析了如何准确模拟其耦合效率与带宽特性,并将仿真结果与实验数据进行对比验证,为硅光芯片的设计与优化提供了实用指导。

weixin_29294597的博客 513

Oracle - 序列的创建与使用,实现自增字段功能

Oracle 序列的创建与使用,实现自增字段功能 本文全面介绍了在Oracle数据库中通过序列(Sequence)实现自增字段功能的完整指南,主要内容包括: 序列基础:Oracle序列是独立数据库对象,可按规则生成唯一递增数值。核心特性包括原子性、缓存机制、可重置性和跨表复用能力。 创建序列:详细解析CREATE SEQUENCE语法,包括START WITH、INCREMENT BY、MAXVALUE等参数,并给出生产环境最佳实践示例。 使用序列:展示在INSERT语句、PL/SQL块中的实际应用,解释N

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

记录:MCGS和正弦变频器通讯

触摸屏实现对变频器:启动、停止、频率设定、频率读取、电压读取、电流读取。通讯方式Modbus RTU。

m0_61837027的博客 1026

大白话说Java设计模式-07-抽象工厂模式(源码剖析篇)

本文从JDK、Spring、MyBatis源码角度深度剖析抽象工厂模式的工业级实现,详解JDK Swing UI组件工厂、Spring AbstractBeanFactory、MyBatis SqlSessionFactory等场景中抽象工厂模式的设计思路,分析框架中抽象工厂如何适配多产品族扩展需求,对比不同实现的性能与扩展性权衡,帮助读者掌握抽象工厂模式在框架级代码中的应用原理与实践借鉴思路。

Java后端 | AI智能体应用实战派 | 电脑技能行家 278

使用PaddleOCR识别查验平台验证码

PaddleOCR识别国税查验平台验证码

m0_63932300的博客 1269

立创开源:基于AD831/ADF4351的250-500MHz宽频调幅信号处理实验电路设计与实现

本文详细解析了基于AD831混频器和ADF4351本振源的250-500MHz宽频调幅信号处理实验电路的设计与实现。文章从项目需求出发,系统讲解了超外差接收架构、核心模块(包括射频前端、混频器、本振源、AGC环路及解调电路)的选型与原理,并提供了实战调试波形与性能验证,为射频电路学习者提供了从理论到实践的完整指南。

weixin_35706255的博客 228

MyBatis流式查询实战:解决海量数据查询内存溢出问题

这次我们来看一个 Java 开发中非常实际的问题:如何用 MyBatis 的流式查询,解决一次性加载海量数据导致的内存溢出(OOM)。很多开发者都遇到过,一个看似简单的 SELECT * FROM large_table ,在数据量达到百万级时,如果直接返回 List ,JVM 堆内存瞬间就会被撑爆,服务直接崩溃。MyBatis 提供的流式查询(Streaming Query)就是为这种场景而生的,它允许你像处理流一样,逐条从数据库读取和处理数据,而不是一次性把所有数据都加载到内存里。 这篇文章的重点不是讲

weixin_30940783的博客 590

Git GUI学习教程

学习宗旨:快速应用,不易忘记 很遗憾,申请Git的专栏未审批,那我就不再写专栏了,把最近的学习心得写一下,我也是在学习中进行,有任何问题直接留言,回复交流,我还采用思路+实践模式快速过。 目录 1、Git是什么 2、远程仓库 1)GitHub: 2)Gitee(码云): 3、安装Git(Windows) 1)下载 ...

Alexantao 的专栏 7254

Spring Boot多数据源配置详解:静态配置方案与MyBatis Plus集成实践

在现代企业级应用开发中,数据库连接管理是核心基础。随着业务复杂度提升,单一数据源往往无法满足读写分离、日志隔离、多系统集成等场景需求,多数据源配置成为Java后端开发的必备技能。其原理在于在Spring IoC容器中管理多个DataSource Bean,并通过与SqlSessionFactory、TransactionManager的精确绑定,实现不同数据访问操作的物理隔离。这项技术的核心价值在于提升系统架构的灵活性与可维护性,有效分摊数据库压力,保障核心业务性能。典型的应用场景包括主从读写分离、操作日志

weixin_34007886的博客 440

【AI智能体】飞书 AI 智能客服机器人搭建与使用实战操作详解

飞书 AI 智能客服机器人搭建与使用实战操作详解

congge 6059

Python-自动化绘制股票价格通道线

创建更强大、更可靠的价格通道检测算法。

探索人工智能领域 948

Spring事务管理

本文介绍了Spring框架的事务管理和持久化框架配置。主要内容包括: Spring事务管理的核心接口:PlatformTransactionManager(平台事务管理器)、TransactionDefinition(事务定义信息)和TransactionStatus(事务状态)。根据不同的持久层框架(JDBC/MyBatis或Hibernate)需要选择不同的实现类。 Spring事务管理的两种方式: 编程式事务管理:通过TransactionTemplate模板类手动管理事务 声明式事务管理:分为基于A

py_1990_04_20的博客 160

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数据库连接必须关闭吗?揭秘不释放连接的四重系统代价

数据库连接是应用程序与数据库交互的基础资源,其本质远不止一个Java对象——它在底层绑定TCP socket、服务端线程、内存缓冲区及事务上下文。理解连接的生命周期与资源开销,是保障高并发系统稳定性的前提。未正确关闭连接将触发网络层端口耗尽、服务端线程阻塞、连接池失效及事务悬挂等连锁问题,直接导致MySQL拒绝连接、服务超时甚至全链路雪崩。本文结合JDBC、Spring、MyBatis、云原生等主流技术栈,详解连接泄漏的真实机理与七类典型场景的关闭策略,并提供SHOW PROCESSLIST、P6Spy、j

didi9310的博客 371

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

面试问题总结

文章目录1.abstract和interface异同2.构造方法3.final关键字作用4.重写和重载的区别4.1重载4.2重写5.this关键字6.封装的作用,实现封装的步骤7.封装中的getter和setter方法分别作用7.1setter方法7.2getter方法8.Mybatis-plus与Spring Data JPA9.装箱和拆箱9.1装箱9.2拆箱10.ArrayList底层原理11.反射12.Filter13.$与#的区别14.js中的DOM对象与jQuery中的DOM区别15.四大元注解1

肥猫不是猫 1111

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringBoot电商项目实战:从环境搭建到MVC架构深度解析

在Java企业级开发领域,SpringBoot以其简化配置和快速构建的特性,成为开发Web应用的主流框架。其核心原理在于通过自动配置和起步依赖,大幅降低了Spring应用的入门门槛。掌握SpringBoot整合MyBatis、Thymeleaf等技术的实战能力,对于构建可维护的电商系统具有重要价值。这类项目通常应用于毕业设计、课程实践等场景,帮助开发者理解从数据层到视图层的完整MVC协作流程。本文聚焦于一个典型的SpringBoot电商项目,详细拆解其环境配置、数据库连接以及核心业务代码的实现,特别是针对*

weixin_33978044的博客 434
上一篇: druid生成sqlList日志解析
下一篇: MysqlAnalyzeStatement not allow : analyze table
华升G
博客等级 码龄17年 43粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值