MyBatis面试深度解析:关键知识点与实践技巧

需积分: 0 1 下载量 196 浏览量 更新于2024-06-18 收藏 1.65MB PDF 举报
"MyBatis面试题的PDF包含一系列关于MyBatis框架的常见问题,涵盖范围广泛,涉及SQL映射、动态SQL、缓存机制、事务管理、日志、分页、延迟加载以及多表查询等多个方面。" 在MyBatis中,`#{}`和`${}`有着显著区别。`#{}`是预编译参数,它会被MyBatis替换为`?`,使用PreparedStatement的`set`方法来设置参数,这样可以有效防止SQL注入,提高安全性。而`${}`则进行简单的字符串替换,直接将变量值插入到SQL语句中,不进行预编译,存在SQL注入的风险。 MyBatis实现分页的方法有多种。一种是在SQL语句中直接使用数据库支持的分页关键字,如`LIMIT`,配合应用程序传递的当前页和每页记录数。另一种是使用MyBatis的`RowBounds`对象,它可以在内存级别实现分页。此外,还可以通过使用PageHelper等第三方插件,利用Interceptor拦截器动态地在SQL执行前拼接分页关键字,提供更便捷的分页功能。 MyBatis的缓存机制包括一级缓存和二级缓存。一级缓存默认开启,存在于SqlSession级别,同一个SqlSession内的多次相同查询会复用结果。二级缓存可配置,跨SqlSession共享,但需要注意并发控制和数据一致性问题。 对于实体类属性名与表字段名不一致的情况,MyBatis通过`@Column`注解或`resultMap`配置来指定映射关系。 获取自动生成的主键值,通常在插入操作后,可以通过`useGeneratedKeys="true"`和`keyProperty="id"`来获取。 MyBatis的事务管理可以通过编程式和声明式两种方式进行。编程式事务管理需要手动调用开始、提交、回滚等事务方法,而声明式事务管理通常结合Spring等框架自动处理事务边界。 日志文件的配置主要涉及MyBatis的日志实现,可以选择Log4j、SLF4J、Java Util Logging或其他兼容的日志框架来输出调试信息。 批量删除操作一般通过动态SQL实现,例如`<delete>`标签内使用`where`或`trim`标签动态构建条件。 模糊查询通常使用`like`操作,结合`#{}`安全地传递参数。 SQL映射文件的配置方式包括元素的使用,如`<insert>`, `<update>`, `<select>`, 和 `<delete>`,以及动态SQL标签如`<if>`, `<where>`, `<trim>`, `<set>`, `<choose>`, `<when>`, `<otherwise>`, 和 `<foreach>`等,它们提供了强大的条件构建能力。 延迟加载(懒加载)是指当真正需要关联对象时才去加载,以提高性能。在MyBatis中,多对一和一对多的关联关系可以通过`<association>`和`<collection>`标签配置,其中`<collection>`通常对应List集合属性。 这份PDF涵盖了MyBatis的许多核心概念和技术点,对理解和掌握MyBatis框架非常有帮助。