MyBatis面试题, MyBatis
MyBatis面试题, MyBatis
QA
Step 1
Q:: 什么是MyBatis?
A:: MyBatis 是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的XML或注解来配置和映射原生类型、接口和Java POJO(Plain Old Java Objects)到数据库中的记录。
Step 2
Q:: MyBatis与Hibernate的区别是什么?
A:: MyBatis 和 Hibernate 都是持久层框架,但它们有一些显著的区别。MyBatis 是一个半自动化的 ORM 框架,主要依赖手写 SQL 查询,并支持自定义 SQL 和存储过程。而 Hibernate 是一个全自动化的 ORM 框架,能够自动生成 SQL 语句,主要依赖实体映射。MyBatis 更适合复杂查询场景,而 Hibernate 更适合快速开发和简单查询场景。
Step 3
Q:: MyBatis 的工作原理是什么?
A:: MyBatis 的工作原理主要包括以下几个步骤:1. 加载配置文件:读取MyBatis配置文件和映射文件。2. 创建SqlSessionFactory:通过配置文件创建SqlSessionFactory对象。3. 获取SqlSession:通过SqlSessionFactory获取SqlSession对象。4. 执行SQL:通过SqlSession对象执行SQL语句。5. 提交事务:执行成功后提交事务或回滚事务。6.
释放资源:关闭SqlSession对象。
Step 4
Q:: 什么是SqlSession?如何使用?
A:: SqlSession 是 MyBatis 提供的用于执行SQL操作的主要接口。它包括插入、更新、删除和查询操作。使用时可以通过 SqlSessionFactory 获取 SqlSession 对象,然后通过这个对象来执行SQL语句,最后需要关闭 SqlSession 以释放资源。
Step 5
Q:: 如何在MyBatis中配置和使用动态SQL?
A:: 在 MyBatis 中,动态 SQL 可以通过<if>、<choose>、<when>、<otherwise>、<trim>、<where>、<set>等标签来实现。动态SQL主要用于在运行时根据条件动态生成SQL语句。例如:<if test="name != null"> AND name = #{name} </if>
。
用途
面试MyBatis的内容主要是为了考察候选人对持久层框架的理解和应用能力。在实际生产环境中,MyBatis 常用于需要复杂SQL查询的应用场景,例如需要自定义SQL或者存储过程来进行性能优化的系统。此外,了解MyBatis还可以帮助开发者更好地处理数据库操作,提高代码的可维护性和性能。\n相关问题
MyBatis 面试题, MyBatis
QA
Step 1
Q:: 什么是MyBatis?
A:: MyBatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 通过消除几乎所有的 JDBC 代码和手动设置参数及获取结果集的工作,使得开发更加简洁。
Step 2
Q:: MyBatis 与 Hibernate 的区别是什么?
A:: MyBatis 和 Hibernate 都是 ORM(对象关系映射)框架,但它们的工作方式有所不同。Hibernate 是全自动化的 ORM 框架,可以自动生成 SQL 语句,进行对象和数据库表之间的映射,而 MyBatis 则需要手动编写 SQL 语句并配置映射文件。这使得 MyBatis 更灵活但同时也需要更多的代码控制。
Step 3
Q:: MyBatis 的核心配置文件有哪些?
A:: MyBatis 的核心配置文件包括两个:SqlMapConfig.xml(主配置文件)和 **Mapper.
xml**(映射配置文件)。主配置文件中定义了数据源、事务管理器、以及其他全局配置;映射配置文件则定义了具体的 SQL 语句和它们与 Java 对象的映射关系。
Step 4
Q:: 如何使用 MyBatis 的动态 SQL?
A:: MyBatis 提供了一套功能强大的动态 SQL 语法,包括 <if>
,<choose>
,<when>
,<otherwise>
,<trim>
,<where>
和 <set>
标签等。这些标签可以根据条件生成不同的 SQL 语句,从而提高 SQL 的灵活性。
Step 5
Q:: 如何在 MyBatis 中处理事务?
A:: MyBatis 本身不提供事务管理功能,而是通过和外部框架(如 Spring)集成来处理事务。在 Spring 中,可以通过 @Transactional
注解来管理事务。在使用事务时需要确保数据库连接的自动提交功能被禁用。
Step 6
Q:: MyBatis 中如何进行分页查询?
A:: MyBatis 支持多种方式的分页查询。最常见的是使用插件(如 PageHelper)来实现分页,或者在 SQL 中手动编写分页逻辑,利用 LIMIT
关键字(适用于 MySQL)等实现分页功能。
Step 7
Q:: MyBatis 的一级缓存和二级缓存的区别是什么?
A:: MyBatis 的一级缓存是 SqlSession 级别的缓存,默认开启,并且在同一个 SqlSession 期间有效。二级缓存是跨 SqlSession 的缓存,作用范围是 mapper 映射文件级别,且需要手动配置。一级缓存对于单一事务中的查询非常有效,而二级缓存则适合跨事务的数据共享。
Step 8
Q:: MyBatis 是如何实现延迟加载的?
A:: MyBatis 实现延迟加载主要通过 <association>
和 <collection>
标签的 lazy
属性。当这些属性设置为 lazy=true
时,关联对象或集合对象在实际使用时才会被加载,而不是在初始查询时立即加载。