当前位置: 首页 > article >正文

ORM框架(Object-Relational Mapping,对象关系映射框架)

MyBaits

以下是MyBatis面试中常见的知识点和考点,结合最新的面试问题和答案进行总结:

1. MyBatis基础

  • 什么是MyBatis?

    • MyBatis是一款基于Java的持久层框架,通过XML描述符或注解将对象与存储过程或SQL语句进行映射,实现了面向对象编程与关系数据库的映射。

  • MyBatis的优点是什么?

    • 简化数据库访问过程,不需要编写繁琐的JDBC代码。

    • 提供强大的动态SQL功能,可以根据条件拼接SQL语句。

    • 支持映射文件和注解两种方式配置SQL映射。

    • 支持延迟加载和缓存机制,提高查询性能。

2. MyBatis的执行流程

  • MyBatis的执行流程包括哪些步骤?

    1. 加载配置文件:加载MyBatis的配置文件mybatis-config.xml

    2. 创建SqlSessionFactory:根据配置信息,创建SqlSessionFactory对象。

    3. 获取SqlSession:通过SqlSessionFactory对象获取SqlSession

    4. 执行SQL:在SqlSession中执行SQL语句。

    5. 返回结果:获取SQL执行的结果。

3. 配置文件

  • MyBatis的配置文件结构是什么?

    • 配置文件包括properties(属性)、settings(设置)、typeAliases(类型别名)、typeHandlers(类型处理器)、objectFactory(对象工厂)、plugins(插件)、environments(环境配置)、databaseIdProvider(数据库厂商标识)和mappers(映射器)。

  • defaultExecutorType的值有哪些?

    • SIMPLE(普通执行器)、REUSE(重用预处理语句)、BATCH(批量执行器)。

4. Mapper接口

  • MyBatis中Mapper接口的实现原理是什么?

    • MyBatis使用动态代理为Mapper接口生成实现类,从而在调用Mapper方法时执行SQL语句。

5. 动态SQL

  • MyBatis的动态SQL支持方式有哪些?

    • 动态SQL可以通过XML配置和注解方式实现。

  • #{}${}的区别是什么?

    • #{}用于预处理语句,可以防止SQL注入;${}用于字符串替换,不会防止SQL注入。

6. 缓存机制

  • MyBatis的缓存机制有哪些?

    • MyBatis支持一级缓存(与SqlSession关联)和二级缓存(与SessionFactory关联)。

  • 如何配置二级缓存?

    • 二级缓存需要在Mapper文件中配置cache标签。

7. 事务管理

  • MyBatis的事务管理方式有哪些?

    • MyBatis支持编程式事务管理和声明式事务管理。

  • SqlSession的事务提交和回滚方法是什么?

    • 提交事务:sqlSession.commit();回滚事务:sqlSession.rollback()

8. 性能优化

  • 如何优化MyBatis的性能?

    • 使用合适的Fetch策略,避免N+1查询问题。

    • 合理配置缓存,减少数据库访问。

    • 使用批处理和分页查询。

9. 多表关联查询

  • MyBatis如何处理多表关联查询?

    • 可以通过JOIN语句或嵌套查询实现多表关联查询,并通过结果映射配置映射到Java对象。

10. 分页功能

  • MyBatis中如何实现分页功能?

    • 可以通过插件(如PageHelper)或自定义SQL语句实现分页。

11. 设计模式

  • MyBatis中应用了哪些设计模式?

    • 包括工厂模式(SqlSessionFactory)、单例模式(Configuration)、代理模式(动态代理Mapper接口)、模板方法模式(Executor接口)、建造者模式(SqlSessionFactoryBuilder)、装饰器模式(插件机制)、策略模式(缓存策略)和责任链模式(拦截器链)。

12. 异常处理

  • 如何处理MyBatis中的异常?

    • 可以通过自定义异常处理和事务回滚来处理异常。

13. 与其他框架的对比

  • 对比MyBatis和Hibernate,它们各自的优缺点是什么?

    • MyBatis:灵活性高,支持动态SQL,性能较好;但需要手动编写SQL语句。

    • Hibernate:封装程度高,不需要手动编写SQL语句;但性能相对较低,灵活性较差。

这些知识点覆盖了MyBatis的核心概念、配置、使用场景以及常见问题,是面试中常见的考点。

Hibernate

以下是Hibernate面试中常见的知识点和考点,结合最新的面试问题和答案进行总结:

1. Hibernate基础

  • 什么是Hibernate?

    • Hibernate是一个流行的Java持久化框架,它通过ORM(对象关系映射)技术将Java对象映射到数据库表中,从而简化数据库操作。

  • 为什么使用Hibernate?

    • 封装了JDBC代码,简化了数据访问层的重复性代码。

    • 提供了灵活的ORM映射,支持复杂的关系数据库模型。

    • 性能良好,是一个轻量级框架。

2. ORM概念

  • ORM是什么?

    • ORM(对象关系映射)是一种技术,用于解决面向对象的Java类与关系型数据库之间的不匹配问题。

  • ORM的核心原则

    • 简单性:以最基本的形式建模数据。

    • 传达性:数据库结构被文档化。

    • 精确性:基于数据模型创建标准化的结构。

3. Hibernate配置

  • 如何查看Hibernate生成的SQL语句?

    • 在配置文件中设置hibernate.show_sql=true,可以将生成的SQL语句打印到控制台。

  • Hibernate的配置方法

    • 基于XML配置(hibernate.cfg.xml)。

    • 程序化配置(通过代码逻辑)。

4. 持久化对象的生命周期

  • Hibernate中的对象状态

    • 瞬态(Transient):对象未与任何持久上下文关联。

    • 持久化(Persistent):对象与数据库记录关联。

    • 分离(Detached):对象曾与持久上下文关联,但当前未关联。

5. 查询语言

  • HQL是什么?

    • HQL(Hibernate Query Language)是Hibernate的查询语言,类似于SQL,但操作的是Java对象而不是数据库表。

  • HQL与SQL的区别

    • HQL操作的是Java对象,而SQL操作的是数据库表。

    • HQL更灵活,支持面向对象的查询。

6. 事务管理

  • Hibernate的事务管理

    • 使用Transaction接口管理事务,可以通过编程式或声明式方式管理。

  • 事务的提交与回滚

    • 提交事务:transaction.commit()

    • 回滚事务:transaction.rollback()

7. 缓存机制

  • Hibernate的一级缓存和二级缓存

    • 一级缓存:与Session关联,自动管理。

    • 二级缓存:与SessionFactory关联,需要手动配置。

  • 二级缓存的作用

    • 提高查询性能,减少数据库访问。

8. 映射关系

  • Hibernate支持的映射关系

    • 一对一、一对多、多对一、多对多。

  • Fetch策略

    • Lazy加载:延迟加载,仅在需要时加载关联对象。

    • Eager加载:立即加载,一开始就加载所有关联对象。

9. 性能优化

  • 如何优化Hibernate性能?

    • 使用合适的Fetch策略,避免N+1查询问题。

    • 合理配置缓存,减少数据库访问。

    • 使用批处理和分页查询。

10. 并发与锁

  • Hibernate中的锁机制

    • 乐观锁:通过版本号或时间戳实现。

    • 悲观锁:通过数据库锁实现。

  • 如何处理并发问题?

    • 使用乐观锁或悲观锁保护数据一致性。

11. 与其他框架的整合

  • Spring与Hibernate的整合

    • 使用Spring管理Hibernate的SessionFactory和事务。

  • Hibernate与JPA的关系

    • Hibernate是JPA的一个实现,提供了更丰富的功能。

12. 高级特性

  • 事件监听器

    • Hibernate支持多种事件监听器(如prePersistpostLoad等),用于在特定事件发生时执行代码。

  • 继承映射

    • Hibernate支持多种继承映射策略,包括表每类、表每层次结构、表每子类。

13. 常见问题

  • save()saveOrUpdate()的区别

    • save()仅用于插入新记录,saveOrUpdate()会根据主键判断是插入还是更新。

  • load()get()的区别

    • load()在找不到记录时抛出异常,get()返回null

这些知识点覆盖了Hibernate的核心概念、配置、使用场景以及常见问题,是面试中常见的考点。


http://www.kler.cn/a/541815.html

相关文章:

  • 《Operating System Concepts》阅读笔记:p9-p12
  • 第40天:Web开发-JS应用VueJS框架Vite构建启动打包渲染XSS源码泄露代码审计
  • Docker 部署 MySQL-5.7 单机版
  • 【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解
  • 防火墙术语大全( Firewalld Glossary of Terms)
  • 【go】交叉编译
  • 使用Hexo部署NexT主体网站
  • 现代前端工程化实践:高效构建的秘密
  • 以简单的方式过一生
  • k8s部署logstash
  • HTML 左右联动高亮示例
  • ‌Linux系统中无法使用netstat命令的原因及解决方法
  • Django 简单安装(pycharm)
  • 重生之我要当云原生大师(十五)归档和传输文件
  • 迷宫问题 XDOJ
  • Golang学习历程【第七篇 闭包type defer panic recover了解time包】
  • 【AI落地应用实战】DeepSeek大模型应用探讨与RAG技术全景——从实验室榜单看向真实业务场景
  • 易语言Easy Programming Language
  • ArrayList、LinkedList、HashMap、HashTable、HashSet、TreeSet
  • 【时序预测】-深度学习系列
  • halcon三维点云数据处理(十五)xyz_attrib_to_object_model_3d
  • 图片下载不下来?即便点了另存为也无法下载?两种方法教你百分之百下载下来
  • Failed to build mysqlclient
  • 帝国CMS8.0版多访问端支持可选不绑定二级域名
  • 二、Golang Channel通信和控制题目
  • 数据分析对企业有什么价值