"互联网大厂Java工程师面试题涵盖了广泛的Java技术栈,包括MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等。这份资料提供了一套详细的面试题,旨在测试应聘者的Java及相关框架的掌握程度,同时也提供了MyBatis相关问题的解答,如MyBatis的优势、工作原理、映射形式、动态SQL等,并涉及到了一对一、一对多的关联查询及MyBatis的缓存机制。"
在Java工程师的面试中,MyBatis作为一款流行的持久层框架,其理解和使用能力是考察的重要部分。以下是MyBatis相关知识点的详细解释:
1. MyBatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者将SQL语句写在XML或注解中,实现了SQL与Java代码的分离,提高了开发效率。
2. MyBatis的优点包括灵活的SQL构建、事务控制、减少模板代码、支持存储过程等。缺点则可能包括SQL编写和维护的工作量相对较大,不如全自动化框架方便。
3. MyBatis适合于对SQL有高度定制需求且性能要求较高的项目,因为它允许开发者直接编写SQL,可以进行精细化优化。
4. MyBatis与Hibernate的主要区别在于,Hibernate是全自动ORM,提供了对象的透明化操作,而MyBatis是半自动的,需要手动编写SQL。
5. #{ }和${ }的区别在于,#{ }是预编译处理,用于防止SQL注入;${ }是字符串替换,不进行预编译,可能存在SQL注入风险。
6. 当属性名与字段名不一致时,可以通过@Alias注解或ResultMap来映射。
7. 模糊查询like语句通常在SQL中使用like关键字配合通配符%,如`where column like '%value%'`。
8. Dao接口的工作原理是通过MyBatis的动态代理机制,生成实现了该接口的代理类,调用接口方法时,实际上执行的是对应的SQL语句。
9. MyBatis的分页通常借助插件实现,如PageHelper,原理是在SQL执行前后动态插入分页相关的SQL片段。
10. MyBatis通过结果映射将SQL执行结果封装为目标对象,支持Map映射和ResultMap映射。
11. 批量插入可通过<insert>标签中的useGeneratedKeys和keyProperty属性实现。
12. 获取自动生成的主键值通常通过Statement的getGeneratedKeys方法。
13. 在Mapper中传递多个参数可以使用Map、注解或ParameterMap。
14. 动态SQL在MyBatis中用于根据条件构建SQL,如if、choose、when、otherwise等标签。
15. MyBatis的接口绑定包括注解绑定和XML配置绑定,实现方式多样,可以根据项目需求选择。
16. 除了基本的CRUD标签,XML映射文件还包含resultMap、parameterMap、association、collection等标签。
17. MyBatis的一级缓存是SqlSession级别的,二级缓存是Mapper级别的,它们分别管理了不同范围的查询结果缓存。
18. MyBatis的延迟加载在默认情况下不开启,可以通过配置开启,实现按需加载关联数据,减少数据库压力。
19. MyBatis实现一对一关联查询通常通过ResultMap的association标签,而一对多则通过collection标签。
20. 一对一关联查询可以通过嵌套查询或联合查询的方式实现。
21. 一对多关联查询可以使用association标签结合collection标签,通过外键关系映射。
22. MyBatis的二级缓存默认不支持延迟加载,但可以通过自定义实现。
23. 使用Mapper接口调用时,需确保接口方法与XML中的SQL语句匹配,同时需要在SqlSessionFactory或SqlSession上配置Mapper。
24. Mapper编写方式包括XML方式和注解方式,两种方式都能实现对SQL的管理。
25. 这些面试题旨在全面评估Java工程师对MyBatis和其他相关技术的掌握程度,包括但不限于SQL的灵活性、ORM的理解、框架的高级特性和最佳实践。