互联网Java工程师面试必备:MyBatis与技术栈深度解析

需积分: 5 8 下载量 193 浏览量 更新于2024-07-01 收藏 8.23MB PDF 举报
"1000道互联网Java工程师面试题.pdf" 包含了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优点** 包括:简化了JDBC的编码,减少了出错的可能性;提供了XML和注解两种方式来映射SQL和结果集;支持动态SQL,使得在编写复杂查询时更加灵活。 3. **MyBatis缺点** 主要是对于复杂的多表联查,MyBatis的SQL书写相对复杂;相比全自动化ORM框架(如Hibernate),MyBatis需要更多的手动操作;由于依赖XML或注解配置,增加了学习成本。 4. **适用场合** MyBatis适用于对SQL有高度定制需求,或者对性能有较高要求,需要手动控制SQL执行的场景。 5. **MyBatis与Hibernate的不同** Hibernate是一个全自动ORM框架,提供了一种对象关系映射的解决方案,而MyBatis是半自动的,需要开发者自己编写SQL。 6. **#{}和${}的区别** #{}是预编译处理,防止SQL注入;${}是字符串替换,存在SQL注入的风险。 7. **实体类属性与表字段不一致** 可以通过注解@XmlElement或@TableField指定字段映射关系,或者在Mapper XML文件中配置resultMap进行映射。 8. **模糊查询like语句** 在MyBatis中,可以使用like关键词配合#{param}占位符在XML映射文件或注解中编写模糊查询。 9. **Dao接口工作原理** Dao接口的方法会被MyBatis的代理类实现,通过动态代理在运行时生成具体的方法实现,从而调用SQL执行。 10. **MyBatis分页** MyBatis自身并不提供分页功能,通常需要借助分页插件如PageHelper来实现。分页插件原理是对SQL进行解析,插入LIMIT和OFFSET子句。 11. **对象封装与返回** MyBatis通过Executor执行SQL,ResultSetHandler处理结果集,将数据封装到目标对象并返回。映射形式包括自动映射、结果映射、集合映射等。 12. **批量插入** 可以使用 `<insert>` 标签的`useGeneratedKeys`属性和`keyProperty`属性配合`batchExecutor`执行器实现批量插入。 13. **获取自动生成键值** 使用`useGeneratedKeys="true"` 和 `keyProperty="id"` 属性,MyBatis会自动获取并设置主键值。 14. **传递多个参数** 可以使用Map传参,或者使用多个`<parameter>`标签,还可以使用注解`@Param`来标识参数。 15. **动态SQL** 动态SQL允许在XML映射文件或注解中根据条件拼接SQL,如`if`、`choose`(when/otherwise)、`where`、`trim`、`foreach`等标签。 16. **其他标签** 除了基础的CRUD标签,还有`<resultMap>`定义结果映射,`<association>`和`<collection>`处理关联关系,`<parameterMap>`和`<result>`处理参数和结果,`<selectKey>`获取自增主键等。 17. **半自动ORM** MyBatis需要开发者编写SQL,而全自动ORM如Hibernate会自动生成SQL。区别在于对数据库操作的控制权和灵活性。 18. **一对一、一对多关联查询** MyBatis通过`<association>`和`<collection>`标签实现,可以通过嵌套查询或联合查询的方式处理。 19. **延迟加载** MyBatis支持一级缓存和二级缓存,但默认不启用延迟加载。延迟加载是指在真正需要关联数据时才执行查询,而不是在初始加载时就加载所有数据。 20. **一级缓存** 指Session级别的缓存,同一个SqlSession内的相同SQL语句会复用上一次的结果。 21. **二级缓存** 指Mapper级别的缓存,跨Session共享,需要配置并正确实现。 22. **接口绑定** MyBatis支持基于注解的接口绑定和基于XML的接口绑定,通过MapperFactoryBean或@Mapper注解实现。 以上只是部分MyBatis面试题的解答,实际面试中可能还会涉及更多关于Spring全家桶、分布式、消息队列、数据库优化等方面的问题。这些知识点是互联网Java工程师必备的技能,掌握它们对于提升面试成功率至关重要。