MyBatis面试题, # 和 $ 的区别是什么?
MyBatis面试题, # 和 $ 的区别是什么?
QA
Step 1
Q:: MyBatis面试题: #{} 和 ${}
的区别是什么?
A:: #{} 和 ${} 是 MyBatis 中用于在 SQL 语句中插入参数的占位符。#{} 会在 SQL 语句执行前,将参数值以预编译的方式替换成占位符?,这样可以防止 SQL 注入并提高性能。而 ${}
则是直接将参数值插入到 SQL 语句中,容易导致 SQL 注入漏洞,通常只用于表名、列名等不涉及用户输入的地方。
Step 2
Q:: 什么是MyBatis?
A:: MyBatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 通过简单的 XML 或注解来配置和映射原生类型,接口和 Java 的 POJO(Plain Old Java Objects)为数据库中的记录。
Step 3
Q:: MyBatis 的优势和劣势分别是什么?
A:: MyBatis 的优势包括:1. 简化了原生 JDBC 代码,减少了冗余代码。2. 支持动态 SQL,增强了 SQL 的灵活性。3. 提供了良好的缓存机制。4. 易于与 Spring 集成。劣势包括:1. 相比于 Hibernate 等全功能 ORM 框架,MyBatis 需要手动编写 SQL,工作量较大。2.
动态 SQL 可能导致复杂度增加,不易维护。
Step 4
Q:: 如何在 MyBatis 中进行分页?
A:: 在 MyBatis 中实现分页通常有两种方式:1. 在 SQL 语句中手动添加 LIMIT 语句,例如 SELECT * FROM table LIMIT #{offset}, #{limit}。2.
使用 MyBatis 的分页插件,例如 PageHelper 插件,通过拦截 SQL 语句自动添加分页逻辑。
Step 5
Q:: MyBatis 的缓存机制是怎样的?
A:: MyBatis 提供了一级缓存和二级缓存。一级缓存是基于 SqlSession 的缓存,默认开启,生命周期与 SqlSession 相同。二级缓存是基于命名空间的缓存,需要显式配置,生命周期与 SqlSessionFactory 相同,可以跨 SqlSession 共享数据。
Step 6
Q:: 如何在 MyBatis 中进行事务管理?
A:: MyBatis 本身不提供事务管理功能,通常结合 Spring 框架使用,由 Spring 框架提供事务管理。在 Spring 配置文件中,通过声明式事务管理或编程式事务管理来管理事务。