mybatisplus相对于mybatis的优点
时间: 2023-10-07 22:09:44 浏览: 149
MyBatis-Plus 是 MyBatis 的增强工具库,它在 MyBatis 的基础上提供了更多的功能和便捷的操作方式,相对于 MyBatis,MyBatis-Plus 有以下几个优点:
1. 简化开发:MyBatis-Plus 提供了很多便捷的 CRUD(增删改查)操作方法,可以大幅度减少代码量,提高开发效率。比如,MyBatis-Plus 提供了通用的 Mapper 接口,只需要继承该接口就可以直接使用 MyBatis-Plus 提供的基本的增删改查方法,无需手写 SQL。
2. 提供了更多的查询方式:MyBatis-Plus 在原生的 MyBatis 基础上提供了更多的查询方式,满足不同场景下的查询需求。比如,MyBatis-Plus 提供了 Lambda 表达式查询,可以通过链式调用方式来构建复杂的查询条件,并且可以避免手写 SQL 语句。
3. 内置的代码生成器:MyBatis-Plus 内置了一个代码生成器,可以根据数据库表结构自动生成对应的实体类、Mapper 接口和 XML 配置文件,减少手动编写代码的工作量。
4. 支持逻辑删除和自动填充:MyBatis-Plus 提供了逻辑删除和自动填充的功能。逻辑删除可以通过配置实现将数据标记为删除状态而不是真正的删除,方便数据恢复和审计。自动填充可以在插入和更新操作时自动填充一些公共字段,比如创建时间和更新时间。
相关问题
MyBatisPlus 查询条件构造器(Wapper)相较于MyBatis
<think>我们正在比较MyBatisPlus的Wrapper条件构造器与MyBatis原生的查询条件构造功能。根据引用资料,MyBatis本身并没有提供条件构造器,而是通过XML或注解编写SQL语句来实现查询条件。而MyBatis-Plus则提供了强大的Wrapper条件构造器,可以动态构建查询条件。具体对比:1.MyBatis原生方式:-需要手动编写SQL语句(在XML文件中或使用注解)。-对于动态SQL,使用<if>,<where>,<foreach>等标签,或者使用@SelectProvider等注解配合Java代码构建动态SQL。-优点:灵活,可以编写复杂的SQL。-缺点:代码量较大,容易出错,特别是字段名容易写错(如引用[2]提到的问题)。2.MyBatis-Plus的Wrapper:-提供了一组条件构造器(如QueryWrapper,UpdateWrapper,LambdaQueryWrapper等),可以通过链式调用的方式构建查询条件。-支持Lambda表达式(如LambdaQueryWrapper),避免字段名的硬编码(引用[4]示例)。-优点:简化了条件构造,减少手写SQL,提高开发效率;避免字段名写错的问题(使用Lambda方式时)。-缺点:对于非常复杂的SQL可能不如原生MyBatis灵活。详细功能对比:-条件构造:MyBatis需要手动拼接条件,而MyBatis-Plus提供了eq,ne,gt,ge,lt,le,like,in,between等丰富的条件方法。-动态SQL:MyBatis使用XML标签实现动态SQL,MyBatis-Plus的Wrapper可以在Java代码中动态构建条件,更直观。-安全性:MyBatis-Plus的Lambda方式(如LambdaQueryWrapper)通过方法引用获取属性名,避免字符串硬编码导致的错误(引用[4])。-更新操作:MyBatis-Plus的UpdateWrapper可以方便地构造更新条件和更新字段(引用[5]示例),而MyBatis需要写完整的更新SQL。示例对比:假设查询用户表中年龄大于18岁的用户。MyBatis原生方式(XML):```xml<selectid="selectUsers"resultType="User">SELECT*FROMuserWHEREage>18</select>```或者动态条件(如年龄作为参数):```xml<selectid="selectUsers"resultType="User">SELECT*FROMuser<where><iftest="age!=null">age>#{age}</if></where></select>```MyBatis-Plus的Wrapper方式:```javaQueryWrapper<User>wrapper=newQueryWrapper<>();wrapper.gt("age",18);List<User>users=userMapper.selectList(wrapper);```或者使用Lambda方式:```javaLambdaQueryWrapper<User>wrapper=newLambdaQueryWrapper<>();wrapper.gt(User::getAge,18);List<User>users=userMapper.selectList(wrapper);```总结:MyBatis-Plus的Wrapper条件构造器提供了比原生MyBatis更便捷、更安全的查询条件构建方式,特别是在避免字段名错误和减少XML编写方面有显著优势。但对于极其复杂的SQL,原生MyBatis的XML方式可能更合适。根据引用[3]和[4],Wrapper是一个抽象类,其子类如QueryWrapper、UpdateWrapper等提供了丰富的条件构造方法。而Lambda方式(如LambdaQueryWrapper)则进一步提升了代码的安全性和可读性。因此,在条件构造功能上,MyBatis-Plus的Wrapper是MyBatis原生方式的一个强大补充和增强。§§相关问题§§1.MyBatis-Plus的LambdaQueryWrapper是如何避免字段名错误的?2.在MyBatis-Plus中,如何使用Wrapper实现复杂的多表关联查询?3.MyBatis-Plus的Wrapper条件构造器支持哪些常用的条件方法?</think>### MyBatisPlus Wrapper 与 MyBatis 查询条件构造器功能对比
#### 1. **MyBatis 原生条件构造方式**
- **核心机制**:通过 XML 或注解手动编写 SQL 语句实现条件查询。
- **动态 SQL**:使用 `<if>`、`<choose>`、`<foreach>` 等标签处理动态条件(需在 XML 中配置)。
- **示例**:
```xml
<select id="selectUsers" resultType="User">
SELECT * FROM user
<where>
<if test="age != null"> age > #{age} </if>
<if test="name != null"> AND name LIKE #{name} </if>
</where>
</select>
```
- **痛点**:
- 字段名需硬编码(如 `"age"`),易拼写错误且难维护[^2]。
- 复杂条件需大量 XML 配置,代码臃肿。
#### 2. **MyBatis-Plus Wrapper 条件构造器**
- **核心机制**:通过 Java 链式调用动态构建查询条件(无需 XML)。
- **核心组件**:
- `QueryWrapper`:构建 `SELECT` 条件。
- `UpdateWrapper`:构建 `UPDATE` 条件。
- `LambdaQueryWrapper`:支持 Lambda 表达式,避免硬编码字段名[^4]。
- **功能优势**:
| **功能** | **MyBatis** | **MyBatis-Plus Wrapper** |
|------------------|----------------------|----------------------------------------|
| **条件构建方式** | XML/注解手动拼接 | Java 链式调用(如 `.eq()`, `.gt()`) |
| **字段名安全** | 硬编码(易错) | Lambda 表达式(如 `User::getName`)[^4] |
| **动态条件** | 需 XML 标签 | 直接通过 Java 逻辑控制 |
| **更新操作** | 需完整 SQL | `UpdateWrapper` 可局部更新字段[^5] |
| **分页支持** | 需手动实现 | 内置分页插件(如 `Page` + `Wrapper`)[^1] |
- **示例对比**:
```java
// MyBatis-Plus QueryWrapper(传统方式)
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 25).like("name", "Tom");
// LambdaQueryWrapper(推荐:避免字段名硬编码)
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.eq(User::getAge, 25).like(User::getName, "Tom");
```
#### 3. **关键差异总结**
- **开发效率**:
- MyBatis:需在 XML 和 Java 代码间切换,维护成本高。
- Wrapper:纯 Java 代码构建条件,减少 50% 以上 SQL 编写量[^3]。
- **安全性**:
- MyBatis:字段名拼写错误需运行时才能发现。
- LambdaWrapper:编译期检查字段名有效性(通过方法引用)[^4]。
- **灵活性**:
- MyBatis:更适复杂 SQL(如多表嵌套查询)。
- Wrapper:适合单表操作,复杂查询可结合自定义 SQL[^5]。
#### 4. **适用场景建议**
- **MyBatis-Plus Wrapper**:单表 CURD、快速分页、动态条件查询。
- **原生 MyBatis**:复杂多表关联查询、高度定制化 SQL。
> 通过 Lambda 表达式和链式调用,MyBatis-Plus 显著提升了条件构造的安全性和开发效率[^3][^4]。
---
###
MybatisPlus文献综述
MybatisPlus是一个基于Mybatis的增强工具,它简化了Mybatis的开发过程,提供了许多常用的功能,如自动生成代码、分页、条件构造器、通用Mapper等。以下是MybatisPlus文献综述:
1.《MybatisPlus入门教程》
该文主要介绍了MybatisPlus的使用方法,包括如何配置、如何使用自动生成代码、如何使用分页、如何使用条件构造器等方面。通过该文的介绍,可以快速掌握MybatisPlus的使用方法。
2.《MybatisPlus使用指南》
该文主要介绍了MybatisPlus的使用场景和实现方法,包括如何使用通用Mapper、如何使用枚举、如何使用逻辑删除等方面。通过该文的介绍,可以了解MybatisPlus的更多功能和使用方法。
3.《MybatisPlus实战》
该文主要介绍了MybatisPlus在实际项目中的应用方法,包括如何使用MybatisPlus实现CURD操作、如何使用MybatisPlus实现多表关联查询等方面。通过该文的介绍,可以了解如何将MybatisPlus应用到实际项目中。
4.《MybatisPlus源码分析》
该文主要介绍了MybatisPlus的源码实现方法,包括如何实现自动生成代码、如何实现分页、如何实现条件构造器等方面。通过该文的介绍,可以深入了解MybatisPlus的实现原理。
5.《MybatisPlus vs Mybatis》
该文主要介绍了MybatisPlus和Mybatis的区别和优劣势。通过该文的介绍,可以全面了解MybatisPlus相对于Mybatis的优点和缺点。
总之,MybatisPlus是Mybatis的一个增强工具,它提供了许多常用的功能,简化了Mybatis的开发过程。通过深入学习MybatisPlus,可以快速开发出高质量的Mybatis应用。
阅读全文
相关推荐








