2021 MyBatis面试精华:分页、关联查询与最佳实践

需积分: 5 0 下载量 121 浏览量 更新于2024-08-03 收藏 6KB MD 举报
MyBatis是2021年的热门面试话题,本文提供了一些关键问题及答案解析,涵盖了分页查询、关联查询、Mapper接口使用规范、MyBatis基本概念以及#{}和${}的区别。 1. **分页查询**: Mybatis的分页查询并非内置真正的分页功能,而是通过一次性获取所有数据后在客户端进行处理。在MySQL中,可以使用`LIMIT N, M`语句实现,如`SELECT * FROM table LIMIT 10, 20`,表示从第11条开始取,每页20条。而在Oracle中,通常使用伪列`ROWNUM`配合`WHERE ROWNUM <= #{limit} AND ROWNUM > #{offset}`,`#{limit}`为总页数乘以每页数量,`#{offset}`为页码-1乘以每页数量。 2. **关联查询**: Mybatis支持一对一、一对多和多对多的关联查询。实现方法包括: - 单独查询关联对象,将其绑定到主对象上。 - 嵌套查询,类似JOIN,一次查询包含主对象和关联对象的部分信息。 - 子查询用于复杂关联场景。 3. **Mapper接口调用要求**: - 方法名与XML文件中`<select>`、`<update>`等元素的`id`属性匹配。 - 输入参数类型与`<select>`、`<update>`等的`parameterType`一致。 - 输出参数类型与`<select>`、`<update>`等的`resultType`相同。 - XML文件的`namespace`应指向对应的Mapper接口类路径。 4. **MyBatis简介**: MyBatis是一个半对象关系映射(ORM)框架,简化了JDBC编程,程序员可以直接编写SQL语句。它封装了JDBC操作,使得开发者可以专注于业务逻辑,同时提供了灵活性和性能控制。通过XML或注解配置,将Java对象与数据库表映射,减少样板代码。 5. **#{}和${}的区别**: 在MyBatis中,`${}`用于字符串拼接,表达式会被替换为实际值,而`#{}`是预编译的参数,MyBatis会进行安全检查和类型转换。例如,`${name}`会直接输出变量name的值,而`#{id}`则会被映射器插值处理,可能进行参数校验和自动类型转换。在动态SQL或条件语句中,通常使用`#{}`。 这些知识点是理解MyBatis在实际开发中应用的关键点,面试时熟悉并能给出详细解答是提升技术竞争力的重要环节。