Mybatis面试题精选与解析:Java开发工程师面试指南

需积分: 1 0 下载量 29 浏览量 更新于2024-12-19 收藏 1.29MB ZIP 举报
资源摘要信息:"Mybatis常见面试题" Mybatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。Mybatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 在Java开发工程师的面试中,Mybatis是一个高频的考点。以下是关于Mybatis的一些常见面试题和知识点。 1. Mybatis的核心组件有哪些? - SqlSessionFactoryBuilder:用于构建SqlSessionFactory - SqlSessionFactory:用于创建SqlSession实例 - SqlSession:是Mybatis的关键,用于执行SQL语句 - Executor:Mybatis的执行器,负责SQL语句的生成和查询缓存的维护 - StatementHandler:封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、执行语句等 - ParameterHandler:负责对用户传递的参数转换成JDBC Statement 所需要的参数 - ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合 - TypeHandler:负责java数据类型和jdbc数据类型之间的映射和转换 2. Mybatis的框架结构是怎样的? Mybatis的框架结构主要由以下几个部分组成:配置文件、映射文件、核心API、内置对象、绑定接口。 3. Mybatis的优缺点有哪些? - 优点: a. 与Spring框架无缝集成 b. SQL和代码的分离,提高了可维护性 c. 提供XML标签,支持编写动态SQL d. 提供映射标签,支持对象与数据库的ORM字段关系映射 e. 提供对象关系映射标签,支持对象关系组件维护 - 缺点: a. SQL语句的编写工作量较大,尤其是字段多、关联表多时 b. SQL语句依赖于数据库,导致数据库移植性差 c. 框架的更新较慢,与一些新数据库的兼容性可能会有缺陷 4. Mybatis的配置文件包含哪些内容? - properties(属性) - settings(设置) - typeAliases(类型别名) - typeHandlers(类型处理器) - objectFactory(对象工厂) - plugins(插件) - environments(环境配置) - databaseIdProvider(数据库厂商标识) - mappers(映射器) 5. Mybatis的映射文件是如何工作的? 映射文件是Mybatis中定义SQL语句和映射规则的XML文件。它用于将SQL语句和Java对象之间建立映射关系,通过动态SQL和预编译语句(prepared statements)来减少SQL注入风险。 6. Mybatis的工作流程是怎样的? Mybatis的工作流程主要分为以下几个步骤: a. 加载配置文件和映射文件,构造SqlSessionFactory b. 通过SqlSessionFactory生成SqlSession c. 通过SqlSession执行映射的SQL语句,进行CRUD操作 d. 通过SqlSession关闭连接 7. Mybatis是如何实现动态SQL的? Mybatis支持使用各种动态SQL标签来构建灵活的SQL语句,如<if>, <choose>, <when>, <otherwise>, <foreach>, <sql>, <include>等。 8. Mybatis与Hibernate有哪些区别? Mybatis和Hibernate都是优秀的持久层框架,但是它们在理念上有所区别。Hibernate更加注重要求对象的持久化和数据库无关性,而Mybatis则更加关注SQL层面的灵活控制,对于复杂的查询,Mybatis提供了更加直接和灵活的操作方式。 9. Mybatis的一级缓存和二级缓存是什么,它们的区别是什么? - 一级缓存是SqlSession级别的缓存,它可以保存最近执行的SQL语句及其结果。当SqlSession关闭或者调用clearCache方法时,一级缓存会被清除。 - 二级缓存是namespace级别的缓存,它可以跨SqlSession,对同一个namespace的多个SqlSession共享缓存数据。使用二级缓存需要配置cache元素,并且POJO需要实现序列化接口。 10. Mybatis的插件是如何工作的? Mybatis的插件是利用动态代理拦截Executor, StatementHandler, ParameterHandler, ResultSetHandler四个接口的实现类对象,从而实现对Mybatis的底层操作进行拦截。插件可以在方法执行前后进行自定义的处理逻辑。