• java面试题 --- Mybatis&Hibernate


    1. Mybatis 和 Hibernate 有什么区别?

    • Mybatis 是半自动的 ORM 的框架,Hibernate 是全自动的,所谓半自动,就是不会自动查询出关联对象,需要自己写 SQL。


    2. Mybatis 有什么优缺点?

    • 简单轻量,学习成本低,SQL 与业务分离,便于优化,但是对开发人员的 SQL 功底要求较高,且与数据库耦合,数据库移植性较差。


    3. 说一说 Mybatis 的编程步骤。

    • 创建 SqlsessionFactory;

    • 创建 SqlSession;

    • 通过 SqlSession 执行数据库操作;

    • 通过 SqlSession 提交或回滚事务;

    • 关闭 SqlSession。


    4. 调用接口为什么能执行 mapper 中的 SQL?

    • 调用接口的时候会生成代理对象,代理根据接口全限定名找到对应 mapper 中的对应标签,从而执行对应的 SQL。


    5. 什么叫预编译,为什么要预编译?

    • 预编译就是在数据库驱动把 SQL 发给数据库之前,先对其进行编译,数据库就可以直接执行,提高效率,同时预编译可以防止 SQL 注入攻击。


    6. Mybatis 有哪些执行器?

    • SimpleExecutor:默认的执行器,每执行一个操作就开启一个 Statement 对象,用完就关;

    • ReuseExecutor:用完不关闭 Statement 对象,以 SQL 作为 key 保存在 map 中;

    • BatchExecutor:用于批量更新的执行器。


    7. Mybatis 支持延迟加载吗?

    • 仅支持 association 和 collection 的延迟加载。原理是使用 cglib 创建目标对象的代理对象, 调用目标方法时会进入拦截方法,比如调用 a.getB().getName() 时,发现 B 对象为空,就会发送事先保存的查询 B 的 SQL,查出来然后调用 a.setB()方法。


    8. #{} 和 ${} 有什么区别?

    • $ 是占位符替换,而 # 会使用预编译。


    9. Mybatis 插件的原理是什么?

    • 使用 JDK 动态代理来生成代理对象,拦截目标方法,做一些增强。


    10. Mybatis 支持缓存吗?

    • 支持,它有一级缓存和二级缓存,一级缓存用 HashMap 存储,作用域是 session;二级缓存可自定义存储源,作用域是 namespace。


    11. Hibernate 对象的三种状态是什么?

    • 瞬时态:对象刚被 new 出来,数据库没有对应记录,也不在 session 管理中;

    • 持久态:数据库中有对应记录,也在 session 的管理中;

    • 游离态:数据库中有对应记录,但不在 session 的管理中。


    12. openSession 和 getCurrentSession 有什么区别?

    • openSession 每次会开启一个新 session,查询不会使用事务,需要手动关闭 session;而 getCurrentSession 如果是同一个线程每次获取到的都是同一个 session,所有操作都会使用事务,不需要手动关闭。


    13. 说一说 hibernate 的缓存?

    • hibernate 的一级缓存作用域是 session,默认开启,二级缓存作用域是 sessionFactory。flush 方法是让一级缓存与数据库同步,evict 方法是删除一级缓存中指定对象,clear 方法是情况一级缓存。

     

    如果本文对你有帮助,别忘记给我个3连 ,点赞,转发,评论,

    学习更多JAVA知识与技巧,关注博主学习JAVA 课件,源码,安装包,还有最新大厂面试资料等等等

    咱们下期见。

    收藏 等于白嫖,点赞才是真情。


     

  • 相关阅读:
    用高质量图像标注数据加速AI商业化落地
    Web后端开发_01
    【NodeJs-5天学习】第一天篇① —— 第一次认识NodeJs
    微软TTS最新模型,发布9种更真实的AI语音
    [论文分享] EnBinDiff: Identifying Data-Only Patches for Binaries
    [附源码]计算机毕业设计springboot校园代取快递系统
    实战讲解 SpringBoot 定时任务:@Scheduled
    SpringBoot学习笔记(2)——B站动力节点
    select在socket中的server多路复用
    音视频开发29 FFmpeg 音频编码- 流程以及重要API,该章节使用AAC编码说明
  • 原文地址:https://blog.csdn.net/uuqaz/article/details/126108026