前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java面试题 --- Mybatis&Hibernate

java面试题 --- Mybatis&Hibernate

作者头像
贪挽懒月
发布2023-10-16 15:33:26
1370
发布2023-10-16 15:33:26
举报
文章被收录于专栏:JavaEEJavaEE

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 方法是情空一级缓存。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档