讲讲mybatis和mybstis plus面试
时间: 2025-03-13 07:14:52 浏览: 51
### MyBatis与MyBatis Plus的区别及常见面试题解析
#### 一、MyBatis与MyBatis Plus的核心区别
MyBatis是一款经典的ORM框架,提供了灵活的SQL操作能力;而MyBatis-Plus是在MyBatis基础上开发的一个增强工具,旨在简化开发流程并提升效率。以下是两者的主要差异:
1. **实现方式**
MyBatis主要依赖于XML文件或注解的方式完成SQL映射和执行逻辑,开发者需要手动编写大部分SQL语句[^1]。相比之下,MyBatis-Plus内置了许多通用CRUD功能,减少了手写SQL的需求,从而降低了开发成本。
2. **功能扩展**
MyBatis仅提供基础的功能支持,如动态SQL构建、事务管理等。而MyBatis-Plus在此基础上增加了许多实用特性,例如分页插件、性能分析器、代码生成器等功能[^4]。
3. **学习曲线**
使用MyBatis时,由于其高度灵活性,初学者可能需要花费更多时间掌握复杂的配置和SQL优化技巧。然而,MyBatis-Plus通过封装常用场景,使得入门更加简单快捷。
---
#### 二、MyBatis常见面试题解析
##### 1. `#{}` 和 `${}` 的区别
在MyBatis中,`#{} `用于预编译参数化查询,能够有效防止SQL注入攻击,并且会自动为传入的数据加上引号[^2]。相反,`${}` 则直接替换变量值到SQL字符串里,不具备安全防护机制,因此容易受到恶意输入的影响。
##### 2. 延迟加载及其工作原理
MyBatis确实支持延迟加载(Lazy Loading),即当访问关联对象属性时才发起实际查询请求[^3]。其实现基于JDK代理或者CGLIB字节码技术,在初始化代理类实例时不立即加载数据,而是等到真正调用方法时触发相应SELECT语句。
##### 3. 缓存机制概述
MyBatis拥有两级缓存体系——一级缓存默认开启,作用范围局限于单个SqlSession生命周期之内;二级缓存则需显式启用,可跨多个SqlSession共享同一Mapper的结果集。需要注意的是,只有标记了@CacheNamespace或其他形式声明的对象才能参与全局级联存储。
---
#### 三、MyBatis-Plus特色功能详解
作为MyBatis的升级版解决方案之一,MyBatis-Plus不仅继承原有优势还新增了一些亮点模块:
1. **条件构造器**
提供了一套链式API帮助快速拼接复杂WHERE子句表达式,极大提升了编码体验。
2. **乐观锁控制**
支持版本号字段校验更新动作是否冲突,避免并发修改引发脏读现象发生。
3. **多租户隔离方案**
自动附加特定前缀至每条DML命令之中,满足SaaS架构下资源划分需求。
---
```java
// 示例:利用MyBatis-Plus条件构造器进行增删改查操作
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
@Autowired
private UserMapper userMapper;
public List<User> getUsersByAge(int age){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", age);
return userMapper.selectList(queryWrapper);
}
```
---
#### 四、总结对比表
| 特性 | MyBatis | MyBatis-Plus |
|-------------------|----------------------------------|------------------------------------|
| 功能覆盖度 | 较低 | 更高 |
| 学习难度 | 中等偏难 | 易上手 |
| 社区活跃程度 | 成熟稳定 | 近年来增长迅速 |
---
阅读全文
相关推荐














