共计 1027 个字符,预计需要花费 3 分钟才能阅读完成。
本文首发于 cartoon 的博客
转载请注明出处:https://cartoonyu.github.io/c…
Mybatis 逻辑分页和物理分页的区别是什么?
- 分页是为了节省网络传输的数据量
- 逻辑分页是将数据全部加载到内存,再通过后端逻辑控制分页显示到前端
- 物理分页是在数据库层面分部分获取数据,通常情况下对内存的压力较逻辑分页少
Mybatis 是否支持延迟加载?延迟加载的原理是什么?
- Mybatis 支持延迟加载
打开方式
- 在 config 文件中打开延迟加载的开关(<setting name=”lazyLoadingEnabled” value=”true”/>)
- 将积极加载改为延迟加载(<setting name=”aggressiveLazyLoading” value=”false”/>)
延迟加载原理
- 多表关联查询只查询当前表的数据
- 当需要查询关联表的数据时才二次查询关联表的数据
说一下 Mybatis 的一级缓存和二级缓存?
一级缓存是在 SqlSession 上实现的(默认)
- 一次查询时,SqlSession 查询数据库,并将数据缓存
- 二次查询时,SqlSession 查询缓存
- 当使用该 SqlSession 执行 DML 操作时,缓存失效
二级缓存是在 Mapper 上实现的
- 一次查询时,数据缓存在 Mapper 上
- 使用相同 / 不同 SqlSession 查询时,返回 Mapper 层面的缓存
- 同样,当出现 DML 语句时,缓存失效
Mybatis 和 Hibernate 的区别有哪些?
- 参考地址:https://blog.csdn.net/wangpen…
Hibernate 全自动,MyBatis 半自动
- Hibernate 通过对象关系模型实现对数据库操作,自动生成 sql
- MyBatis 只有基本的字段映射,需要手写 sql
Hibernate 移植性比 MyBatis 好
- Hibernate 通过对象关系模型生成 sql,因此能根据数据库不同生成相应的 sql
- MyBatis 手写 sql,所以会出现 sql 语法不支持的情况
- Hibernate 日志系统比 MyBatis 完善
MyBatis 比 Hibernate 需要关注更多细节
- MyBatis 需要自定义的东西比 Hibernate 多,因此需要关心更多细节
MyBatis 在优化 sql 上比 Hibernate 方便
- MyBatis 需要手写 sql,所以优化 sql 语句比较方便
- Hibernate 通过对象关系模型生成 sql,所以直接优化 sql 比较麻烦
- Hibernate 的二级缓存机制比 MyBatis 完善
正文完