互联网大厂Java面试必备:MyBatis深度解析

需积分: 0 7 下载量 117 浏览量 更新于2024-06-27 3 收藏 4.79MB PDF 举报
"互联网Java工程师面试题,涵盖了Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等多个技术栈的面试知识点。" 在Java面试中,特别是针对互联网大厂的面试,面试者需要对各种技术和框架有深入理解。以下是一些关键知识点的详细说明: 1. **MyBatis** 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 2. **MyBatis优点** 包括:灵活的SQL编写、减轻了开发人员的工作量、支持存储过程、易于理解和学习、强大的映射机制等。 3. **MyBatis缺点** 包括:SQL编写工作量相对较大、不适合数据库变更频繁的场景、对于复杂的关联查询可能较为复杂。 4. **MyBatis与Hibernate区别** 主要是灵活性和自动管理程度:MyBatis更加灵活,允许开发者自由控制SQL,而Hibernate更注重对象关系映射,自动化程度高,但牺牲了一定的灵活性。 5. **#{}和${}的区别** #{}用于预编译处理,防止SQL注入;${}则是在SQL解析时替换变量,不安全,可能导致SQL注入。 6. **实体类属性与表字段不一致的处理** 可通过@Mapping注解或者在Mapper XML文件中指定字段映射。 7. **模糊查询like语句** 通常在Mapper XML文件中使用`like`关键词配合通配符 `%` 实现。 8. **Dao接口的工作原理** 通过动态代理生成具体的方法实现,可以是JDK动态代理或CGLIB动态代理。 9. **MyBatis分页** 分页通常通过PageHelper插件实现,原理是对SQL语句进行拦截,动态添加LIMIT和OFFSET子句。 10. **动态SQL** 动态SQL是MyBatis的一大特点,如`if`、`choose`(when/otherwise)、`where`、`set`等标签,允许根据条件拼接SQL。 11. **Mapper映射形式** 包括ResultMap、Association、Collection、Discriminator等,用于不同类型的对象映射。 12. **批量插入** 使用`<insert>`标签的`useGeneratedKeys`和`keyProperty`属性,配合`<selectKey>`标签获取自增主键。 13. **获取自动生成的键值** 通过`useGeneratedKeys="true"`和`keyProperty="id"`设置。 14. **传递多个参数** 可以使用Map、注解方式或使用`@Param`注解。 15. **MyBatis半自动ORM** 它需要手动编写SQL,而全自动ORM如Hibernate会自动生成SQL。 16. **其他XML标签** 包括`<resultMap>`、`<association>`、`<collection>`、`<discriminator>`等。 17. **接口绑定** 包括XML配置绑定和注解绑定,使Mapper接口与XML配置关联。 18. **Mapper接口调用要求** 需要有对应的Mapper XML文件,并确保SQL语句正确。 19. **Mapper编写方式** 包括XML配置文件和注解方式。 20. **MyBatis插件原理** 基于拦截器,实现`Interceptor`接口,通过`Plugin`类生成代理对象。 21. **编写插件** 需要定义拦截器类,实现`intercept`方法,然后在mybatis-config.xml中配置。 这些只是面试中可能涉及的一部分问题,全面准备还需要对每个技术栈的原理、应用场景、最佳实践有深入了解。面试者需要不断学习和实践,才能在面试中脱颖而出。