2020最新版MyBatis高频面试题

2020最新版MyBatis高频面试题攻略

什么是 MyBatis?

MyBatis 是一款基于 Java 语言持久层框架,类似于 Hibernate。它可以将 SQL 语句与 Java 对象映射,方便地进行数据库的访问。

MyBatis 的核心组件是什么?

MyBatis 的核心组件分别为:

  • SqlSessionFactoryBuilder
  • SqlSessionFactory
  • SqlSession
  • Mapper

其中 SqlSessionFactoryBuilder 用于创建 SqlSession 实例,SqlSession 则用于执行 SQL 语句,Mapper 则用于管理 SQL 语句以及其对应的 Java 对象。

MyBatis 的动态 SQL 是什么?如何使用?

动态 SQL 是指,根据不同的条件生成不同的 SQL 语句。MyBatis 提供了两种方式来实现动态 SQL:使用 SQL 片段和使用 XML 标签。

使用 SQL 片段,可以通过代码逻辑手动拼接 SQL 语句。例如:

<if test="name != null">
  AND name = #{name}
</if>
<if test="age != null">
  AND age = #{age}
</if>

使用 XML 标签,则可以更加简洁地实现动态 SQL。例如:

<select id="getUserList" parameterType="map" resultType="User">
  SELECT * FROM user
  <where>
    <if test="name != null">
      AND name = #{name}
    </if>
    <if test="age != null">
      AND age = #{age}
    </if>
  </where>
</select>

其中, 标签表示将所有条件用 AND 连接起来,如果条件为空,则不会添加 AND。

MyBatis 的一级缓存和二级缓存是什么?它们之间的区别是什么?如何配置?

MyBatis 中的缓存分为一级缓存和二级缓存。

一级缓存是在 SqlSession 中保存的缓存。在同一个 SqlSession 中执行相同的查询语句时,MyBatis 会从一级缓存中获取结果,避免频繁地向数据库发送查询请求。

二级缓存则是在 SqlSessionFactory 中保存的缓存。多个 SqlSession 之间共享同一个二级缓存,可以提升系统的性能。需要注意的是,二级缓存只对执行的查询语句产生作用,因为更新、添加和删除操作会导致缓存的失效,需要重新从数据库中获取数据。

MyBatis 的二级缓存需要手动开启和配置。可以通过在 MyBatis 配置文件中添加 标签来开启和配置二级缓存。例如:

<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

MyBatis 的映射器文件中的 resultMap 是什么?如何配置?

在 MyBatis 中,SQL 查询语句的结果集可以映射为 Java 对象。在映射器文件中,可以通过 标签来定义结果集的映射规则。

例如:

<resultMap id="UserResultMap" type="User">
  <id property="id" column="id"/>
  <result property="name" column="name"/>
  <result property="age" column="age"/>
</resultMap>

其中, 标签定义了主键的映射规则, 标签则定义了其他属性的映射规则。

在 SQL 查询语句中,也可以通过在