特性 | MyBatis | Hibernate |
代理实现与性能 | 基于动态代理(JDK/CGLIB),代理对象创建速度快,但功能相对简朴 | 基于字节码加强(Javassist/ByteBuddy),初始化较慢但运行性能好 |
加载方式 | 通过单独的 select 查询(需手动设置) | 支持 JOIN 方式和单表查询两种延迟加载 |
会话管理 | 需手动管理 SqlSession 生命周期 | 通过 Session/EntityManager 自动处理 |
设置方式 | XML 或注解,需明确设置 fetchType | 通过映射关系直接控制(如@OneToMany(fetch=FetchType.LAZY)) |
N+1 解决 | 需手动批量查询或设置关联查询 | 提供批处理机制(batch fetching)自动优化 |
特性 | 形貌 |
支持环境 | MyBatis 完全支持延迟加载功能 |
实现原理 | 基于动态代理机制(JDK 代理或 CGLIB 代理) |
延迟容器 | 使用 ResultLoaderMap 存储延迟加载任务 |
全局设置 | lazyLoadingEnabled和aggressiveLazyLoading控制 |
局部控制 | 通过fetchType属性覆盖全局设置 |
触发条件 | 调用 getter 方法、集合操作方法(size/isEmpty)、遍历等 |
会话依赖 | 延迟加载依赖运动的 SqlSession 和事务 |
N+1 优化 | 批量查询、multiple columns 传参 |
序列化处理 | 实现 Serializable 接口、预先触发延迟加载、自界说序列化计谋 |
与缓存联合 | 延迟加载结果会进入一/二级缓存,提升后续访问性能 |
实用场景 | 关联数据使用频率低、大数据量列表查询、层级数据结构 |
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |