在现代的 java 开发中,mybatis 和 mybatis-plus 都是流行的持久层框架。mybatis 是一个轻量级的 orm 框架,帮助开发者通过映射文件或注解方式来执行 sql 操作。mybatis-plus 是在 mybatis 基础上进行的增强,提供了许多简化和优化功能,使得开发者在使用时能更加高效。
本文将对比 mybatis 和 mybatis-plus,并详细分析 mybatis-plus 提供的增强功能、性能优化以及它如何提升开发效率。
1. mybatis 与 mybatis-plus 的差异
1.1 mybatis 的基本特点
- 灵活性:mybatis 允许开发者通过 xml 配置文件或注解方式编写 sql 查询,具有较高的灵活性。
- 手动编写 sql:开发者需要手动编写 sql 语句,包括增、删、改、查等操作的实现。
- 支持动态 sql:mybatis 支持动态 sql,可以根据条件构造不同的 sql 查询。
- 需要大量配置:在 mybatis 中,开发者需要自己编写 xml 映射文件,配置映射关系,手动配置
sqlsessionfactory、sqlsession等对象。
1.2 mybatis-plus 的增强功能
mybatis-plus 是对 mybatis 的扩展,提供了更高效的配置和操作方式,尤其在减少了大量重复代码的编写。以下是 mybatis-plus 的一些关键优势:
- 通用 crud 操作:mybatis-plus 提供了内置的通用 crud 方法(如
save、remove、updatebyid、selectbyid等),不需要开发者手动编写 sql。 - 条件构造器(querywrapper 和 updatewrapper):mybatis-plus 提供了
querywrapper和updatewrapper,使得动态 sql 构建更加简洁。 - 分页查询:mybatis-plus 内置了分页插件,可以非常简单地进行分页查询。
- 乐观锁支持:内置乐观锁插件,支持并发操作时的数据一致性保障。
- 代码生成器:mybatis-plus 提供了代码生成器,能够自动生成实体类、mapper 接口、service 层代码。
- 自动填充:支持字段自动填充,避免了手动设置字段值。
1.3 对比总结
| 特性 | mybatis | mybatis-plus |
|---|---|---|
| 开发速度 | 需要手动编写 sql 和映射文件,开发速度较慢 | 内置通用 crud 操作,减少了代码量,开发速度更快 |
| 灵活性 | 灵活,支持复杂的动态 sql | 灵活性略低,但提供了简化常见操作的封装 |
| 代码量 | 需要编写大量的 xml 或注解 | 提供通用方法,减少了重复代码和 xml 配置 |
| 分页支持 | 需要手动编写分页查询 sql | 内置分页插件,自动实现分页功能 |
| 自动化功能 | 无 | 提供自动代码生成、自动填充、乐观锁等功能 |
2. mybatis-plus 提供的增强功能
2.1 通用 crud 操作
mybatis-plus 提供了内置的通用 crud 方法,使得开发者不需要手动编写增、删、改、查的 sql 语句。
public interface usermapper extends basemapper<user> {
// 继承 basemapper 后,自动获得常见的增、删、改、查方法
}
这些方法包括:
insert(t entity):插入一条记录。deletebyid(serializable id):根据主键删除记录。updatebyid(t entity):根据主键更新记录。selectbyid(serializable id):根据主键查询记录。selectlist(querywrapper<t> querywrapper):根据条件查询多条记录。
2.2 条件构造器(querywrapper 和 updatewrapper)
querywrapper 和 updatewrapper 提供了丰富的条件构造方法,可以简化 sql 的构建。
querywrapper 示例:
querywrapper<user> querywrapper = new querywrapper<>();
querywrapper.eq("age", 25); // 查询年龄为 25 的用户
list<user> users = usermapper.selectlist(querywrapper);
updatewrapper 示例:
updatewrapper<user> updatewrapper = new updatewrapper<>();
updatewrapper.eq("id", 1).set("age", 30); // 将 id 为 1 的用户年龄更新为 30
usermapper.update(null, updatewrapper);
2.3 分页查询
mybatis-plus 内置了分页插件,通过配置非常容易实现分页查询,免去了手动写分页 sql 的麻烦。
分页查询示例:
page<user> page = new page<>(1, 10); // 第 1 页,每页 10 条记录
querywrapper<user> querywrapper = new querywrapper<>();
querywrapper.gt("age", 18); // 查询年龄大于 18 的用户
ipage<user> userpage = usermapper.selectpage(page, querywrapper);
system.out.println(userpage.getrecords()); // 获取查询结果
system.out.println(userpage.gettotal()); // 获取总记录数2.4 乐观锁插件
mybatis-plus 提供了 乐观锁插件,通过在实体类中标记 @version 注解来启用乐观锁,自动管理版本字段,避免并发冲突。
乐观锁示例:
@data
@tablename("user")
public class user {
@tableid
private long id;
private string name;
private integer age;
private string email;
@version // 乐观锁字段
private integer version;
}mybatis-plus 会自动管理版本字段,确保在并发情况下,只有一个事务能够成功修改数据,避免数据不一致。
3. 开发效率的提升
3.1 自动代码生成
mybatis-plus 提供了 代码生成器,可以根据数据库表自动生成实体类、mapper 接口、service 层代码,减少手动编写代码的时间。
自动生成代码示例:
public class codegenerator {
public static void main(string[] args) {
autogenerator mpg = new autogenerator();
// 全局配置
globalconfig gc = new globalconfig();
gc.setoutputdir("d://code"); // 输出目录
gc.setauthor("developer"); // 作者
gc.setopen(false);
mpg.setglobalconfig(gc);
// 数据源配置
datasourceconfig dsc = new datasourceconfig();
dsc.seturl("jdbc:mysql://localhost:3306/testdb");
dsc.setdrivername("com.mysql.cj.jdbc.driver");
dsc.setusername("root");
dsc.setpassword("password");
mpg.setdatasource(dsc);
// 包配置
packageconfig pc = new packageconfig();
pc.setmodulename("user");
mpg.setpackageinfo(pc);
// 执行生成
mpg.execute();
}
}通过这个代码生成器,你只需要配置数据库连接和包路径,就可以自动生成数据库表对应的实体类、mapper、service 等代码。
3.2 减少重复代码
由于 mybatis-plus 提供了丰富的 通用方法,开发者不再需要编写重复的 sql 查询和数据库操作代码。通用的 selectbyid、insert、update 等方法可以直接使用,极大地提升了开发效率。
4. 性能优化的关键
4.1 内存和 cpu 性能
- 避免全表查询:尽量避免不加条件的全表查询,尤其是在数据量大的情况下。使用
querywrapper设置查询条件,避免全表扫描。 - 使用分页查询:对于需要展示大量数据的场景,使用分页查询
selectpage来限制每次查询的数据量,减小内存负载。
4.2 sql 执行效率
- 批量操作:对于大量的插入、更新或删除操作,可以使用
executebatch方法进行批量操作,减少数据库连接的开销和网络传输的延迟。 - 缓存机制:mybatis-plus 可以与 mybatis 缓存机制结合使用,减少重复查询,提高性能。
4.3 使用索引
确保数据库表中常用的查询字段(如主键、外键)有合适的索引,这样能够大大提高查询效率。
5. 总结
- mybatis-plus 提供了大量的增强功能,使得开发者能够更加高效地进行数据库操作。它减少了手动编写 sql 和冗余代码的工作,提高了开发效率。
- 通用 crud 操作、条件构造器、分页查询、乐观锁 和 自动代码生成 等功能极大简化了数据库访问层的开发。
- 性能优化 方面,mybatis-plus 提供了批量操作、sql 查询优化和缓存等机制,能够有效提升数据库操作的效率。
通过合理使用 mybatis-plus,开发者能够提高数据库操作的效率,减少冗余代码,并提升应用的整体性能。 🚀
到此这篇关于mybatis-plus 对比传统 mybatis 的优势的文章就介绍到这了,更多相关mybatis-plus与mybatis对比内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论