史上最全MyBatis面试题及答案攻略
什么是MyBatis?它的作用是什么?
MyBatis是一个持久层框架,用于简化Java应用程序中的数据库交互。它使用XML或注解来描述对象映射器,从而实现将Java对象映射为数据库表中的数据。MyBatis的主要作用是:简化数据库交互代码的编写,防止SQL注入攻击,提高代码的可维护性和可读性。
MyBatis中的Mapper是什么?
Mapper是MyBatis中描述数据访问的接口,它提供了对数据库操作的各种方法,在MyBatis中往往与XML文件配合使用。Mapper文件中包含了SQL语句,以及与之对应的Java方法,这些Java方法利用Java中的反射机制实现了与数据库的交互。
举例来说,我们可以创建一个UserMapper接口,定义了一系列与用户相关的操作方法,如添加用户、删除用户、查询用户等,然后,在UserMapper.xml中编写SQL语句,实现这些操作。当我们需要对用户表进行操作时,可以直接调用UserMapper接口中的方法,MyBatis就会自动执行与之对应的SQL语句,从而实现对数据库的操作。
代码示例:
public interface UserMapper {
void addUser(@Param("user") User user);
void deleteUser(@Param("id") String id);
User getUserById(@Param("id") String id);
}
<mapper namespace="com.example.dao.UserMapper">
<insert id="addUser" parameterType="com.example.pojo.User">
insert into `user` (`id`,`name`,`age`) value (#{user.id}, #{user.name}, #{user.age})
</insert>
<delete id="deleteUser" parameterType="java.lang.String">
delete from `user` where `id` = #{id}
</delete>
<select id="getUserById" parameterType="java.lang.String" resultType="com.example.pojo.User">
select * from `user` where `id` = #{id}
</select>
</mapper>
MyBatis中的一级缓存和二级缓存分别是什么?
MyBatis中的一级缓存是指在同一个SqlSession中的多次查询,只会发送一次SQL,结果会被缓存起来,后续的查询会直接从缓存中获取,从而减少对数据库的访问次数,提高查询效率。一级缓存是默认开启的,可以通过commit、rollback、close等方法使之失效。
MyBatis中的二级缓存是指在多个SqlSession中共享缓存,可以避免多个SqlSession之间相同查询重复执行相同的查询语句,从而大大提高了应用程序的性能和效率。需要注意的是,二级缓存是需要手动开启的,同时需要配置MyBatis的缓存管理器,也要保证缓存对象是可序列化的。
代码示例:
<!--开启二级缓存-->
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
<!--配置缓存管理器-->
<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>
MyBatis中的动态SQL是什么?如何使用?
MyBatis中的动态SQL是指在SQL语句中加入条件语句,以便根据不同的条件生成不同的SQL语句,从而实现灵活的查询操作。MyBatis提供了两种动态SQL的语法:if和choose。
if语法可以根据一个条件判断生成SQL语句:
<select id="getUserByName" parameterType="java.lang.String" resultType="User">
select * from `user`
<where>
<if test="name != null and name != ''">
and `name` = #{name}
</if>
</where>
</select>
choose语法可以实现类似于switch-case的操作:
<select id="getUserByConditions" resultType="User">
select *
from user
<where>
<choose>
<when test="id != null">and id = #{id}</when>
<when test="name != null">and name = #{name}</when>
<when test="age != null">and age = #{age}</when>
</choose>
</where>
</select>
以上是MyBatis面试题及答案的攻略,涵盖了MyBatis的基本概念、Mapper、缓存和动态SQL。希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:史上最全MyBatis面试题及答案 - Python技术站