MyBatis面试题精编总结

版权申诉
0 下载量 146 浏览量 更新于2024-11-08 收藏 31KB ZIP 举报
资源摘要信息:"MyBatis 常见面试题总结" MyBatis是一个广泛使用的Java持久层框架,它对JDBC进行了封装,使数据库编程更加简单。MyBatis通过使用XML或注解来配置和映射原生信息,将对象与数据库中的记录进行映射。它消除了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(普通的Java对象)映射成数据库中的记录。 在面试中,关于MyBatis的问题经常出现,以下是一些MyBatis常见面试题的总结: 1. MyBatis的优缺点是什么? 优点: - 消除了几乎所有的JDBC代码和手动设置参数以及获取结果集。 - MyBatis可以编写可重用的SQL,将map和对象自动映射到数据库中的记录。 - 提供XML标签,支持编写动态SQL。 - 提供映射标签,支持对象与数据库的记录之间的映射。 - 提供对象关系映射标签,支持对象关系组件维护。 缺点: - SQL语句的编写工作量较大,尤其是字段多、关联表多时。 - 字段名称变更时,需要修改配置文件,维护成本较高。 - 缺少较为完整的文档和样例代码,使用起来有一定的门槛。 2. MyBatis中的#{}和${}的区别是什么? #{}是预编译处理,${}是字符串替换。MyBatis在处理#{}时,会将SQL中的#{}替换为?号,配合PreparedStatement的set方法来赋值,可以有效防止SQL注入,保证程序的运行安全;而${}就是单纯的进行字符串替换,将变量直接拼接在SQL语句中,若变量内容被SQL注入,则会直接反映在SQL语句中,存在安全隐患。 3. MyBatis的映射文件有哪些元素? MyBatis的映射文件主要包含以下元素: - select - insert - update - delete - parameterMap - resultMap - cache - cache-ref 4. MyBatis的一级缓存和二级缓存分别是什么,它们之间的区别是什么? 一级缓存是SqlSession级别的缓存,也被称为本地缓存,当在同一个SqlSession中进行查询时,MyBatis会首先查询一级缓存,若一级缓存中存在,则直接返回结果。一级缓存只在同一个SqlSession中有效,当SqlSession关闭或者调用clearCache()方法时,一级缓存会被清空。 二级缓存是SqlSessionFactory级别的缓存,也被称为全局缓存。MyBatis二级缓存是基于namespace的,不同SqlSession之间可以共享二级缓存中的数据。二级缓存的作用范围更大,可以跨SqlSession,但是它依赖于一级缓存的使用情况。 5. MyBatis的延迟加载是什么,如何实现延迟加载? 延迟加载是MyBatis的一种机制,可以使得对关联对象或者关联集合的加载仅在真正使用到它们的时候才进行加载,而非一次性加载所有关联对象或集合。MyBatis通过resultMap的association和collection标签的fetchType属性来实现延迟加载。 6. MyBatis的动态SQL是什么,常见的动态SQL标签有哪些? 动态SQL是MyBatis强大的特性之一。MyBatis的动态SQL允许在XML文件中构建灵活的SQL语句。这些语句可以依据不同的条件进行变化,使得SQL语句更加灵活。常见的动态SQL标签有: - if - choose (when, otherwise) - where - set - foreach - bind 7. 如何自定义MyBatis的类型处理器? 自定义类型处理器需要实现TypeHandler接口,然后在配置文件中声明它。可以通过注解@MappedJdbcTypes或者@MappedTypes来指定该类型处理器对应的JDBC类型或者Java类型。 8. MyBatis的分页插件是如何工作的? MyBatis分页插件通常是一个拦截器,它可以拦截MyBatis的SQL执行过程,在SQL执行之前或之后进行特定的处理。例如,拦截器可以在SQL执行前添加分页的语句,将SQL改写为只查询当前页的数据。常用的分页插件有PageHelper等。 以上是MyBatis的一些常见面试题总结,了解这些问题有助于在面试中更好地展现你对MyBatis框架的理解和应用能力。