MyBatis面试精华:36题详解+缓存、分页与插件深入解析

需积分: 0 0 下载量 196 浏览量 更新于2024-08-03 收藏 18KB DOCX 举报
MyBatis 是一个强大的Java持久层框架,专为简化数据库访问而设计。它允许开发者自定义SQL查询,利用存储过程,并提供高级映射功能,从而提高代码的灵活性和性能。以下是关于MyBatis的一些核心知识点: 1. 缓存机制: - MyBatis 采用两级缓存:一级缓存在Session级别,即每个线程共享,当Session关闭时,其中的数据会自动失效。默认情况下,一级缓存是启用的。 - 二级缓存在命名空间级别,用于存储更长时间的共享数据,如多个用户的共同结果集。为了利用二级缓存,需确保数据对象实现了Serializable接口,以便序列化存储。配置时要在映射文件中启用二级缓存。 2. 分页功能: - MyBatis 本身支持RowBounds对象进行分页,开发者可以直接在SQL中添加LIMIT关键字实现分页,或者使用分页插件。 - 分页插件的工作原理是实现Mybatis提供的特定插件接口,拦截SQL语句,如将SQL修改为包含LIMIT子句,以便在服务器端进行分页操作。 3. 插件运行原理与编写: - MyBatis 使用动态代理技术(如CGLIB或JDK Proxy)创建拦截器插件,仅限于拦截ParameterHandler、ResultSetHandler、StatementHandler和Executor接口的方法。 - 编写插件时,需要实现Interceptor接口,覆盖intercept()方法,并通过注解指定需要拦截的接口和方法。还需在mybatis-config.xml配置文件中注册插件。 4. 动态SQL: - 动态SQL是MyBatis的强大特性,允许在XML映射文件中通过预定义的标签如trim、where、set等,根据条件动态构建SQL语句,增强了SQL的灵活性。 - 提供的九种动态SQL标签包括trim、where、set等,它们可以根据传入的参数动态拼接SQL,执行时通过OGNL表达式计算值。 5. ${}和#{}的区别: - ${}表示字符串替换,它直接将参数的值插入到SQL中,适合传递简单的字符串。 - #{}是安全的参数占位符,除了字符串替换外,还会根据参数的类型进行自动转换(如日期、对象等),并支持预编译语句,防止SQL注入攻击。 总结,MyBatis 提供了一种高效且灵活的方式来管理数据库交互,其内置的缓存机制、分页支持以及动态SQL功能,极大地提高了开发效率和应用的安全性。掌握这些核心概念对于面试和实际项目开发都至关重要。