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>
其中,
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 查询语句中,也可以通过在
<select id="getUserList" resultMap="UserResultMap">
SELECT * FROM user WHERE name = #{name}
</select>
MyBatis 的分页插件是什么?如何使用?
MyBatis 的分页插件是通过拦截器实现的。通过配置分页插件,可以方便地实现 SQL 查询语句的分页功能。
具体来说,分页插件需要完成以下两个步骤:
- 拦截 SQL 查询语句,修改 SQL 语句,添加 LIMIT 子句;
- 获取总条数,生成分页对象。
在使用分页插件时,需要手动添加插件的依赖,并在 MyBatis 配置文件中配置插件和拦截器。例如:
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
示例一:使用 MyBatis 查询用户列表
在映射器文件 UserMapper.xml 中定义查询语句:
<select id="getUserList" parameterType="map" resultType="User">
SELECT * FROM user
WHERE name LIKE CONCAT('%', #{name}, '%')
LIMIT #{offset}, #{pageSize}
</select>
在 Java 代码中获取 SqlSession 实例,并执行查询语句:
Map<String, Object> params = new HashMap<String, Object>();
params.put("name", "张三");
params.put("offset", 0);
params.put("pageSize", 10);
List<User> userList = sqlSession.selectList("getUserList", params);
示例二:使用 MyBatis 插入用户信息
在映射器文件 UserMapper.xml 中定义插入语句:
<insert id="insertUser" parameterType="User">
INSERT INTO user(name, age) VALUES(#{name}, #{age})
</insert>
在 Java 代码中获取 SqlSession 实例,并执行插入语句:
User user = new User();
user.setName("张三");
user.setAge(18);
int rows = sqlSession.insert("insertUser", user);
sqlSession.commit();
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:2020最新版MyBatis高频面试题 - Python技术站