mybatis 和mybatis-plus 有什么区别?

MyBatis是一个持久层框架,简化SQL操作,但需手动编写SQL和映射。MyBatis-Plus是MyBatis的增强工具,提供更简便的CRUD操作,内置分页、性能分析、全局拦截等功能,减少开发工作量。MyBatis-Plus还支持防止SQL注入,提供主键策略和代码生成器,进一步提升开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatis 和mybatis-plus 有什么区别?

	MyBatis 是持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。MyBatis前身是iBatis,是Clinton Begin在2001年发起的一个开源项目。最初侧重于码软件开发,后续发展成为一款基于java的持久层框架。Mybatis是一款优秀的持久层框架支持自定义SQL查询、存储过程和高级映射,消除了几乎所有的JDBC代码和参数的手动设置以及结果集的检索。MyBatis可以使用简单的XML或者注解进行映射和配置,通过将参数映射到配置的SQL最终解析为执行的SQL语句,查询后将SQl结果集映射成java对象返回。MyBatis提供的持久层框架包括SQL Maps(Mapper)和Data Access Objects(DAO),相对于Hibernate而言它提供的是一种把自动化的ORM实现。MyBatis中一级缓存会默认启用(本地缓存)且不受控制,一般说缓存时指的是MyBatis的二级缓存 。
	MyBatis-plus是一款MyBatis的增强工具,在MyBatis 的基础上只做增强不做改变。其是国内团队苞米豆在MyBatis基础上开发的增强框架,扩展了一些功能,以提高效率。引入 Mybatis-Plus 不会对现有的 Mybatis 构架产生任何影响,而且 MyBatis-plus 支持所有 Mybatis 原生的特性。主要做了那些改动呢? 首先是将简单的增删改查变得更加简化了,咱细细聊聊做了那些增强那些改动。
  • 依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring 。

  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 。

  • 预防Sql注入:内置 Sql 注入剥离器,有效预防Sql注入攻击 。

  • 通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求 。

  • 多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题 。

  • 支持热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动

  • 支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作

  • 支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码(生成自定义文件,避免开发重复代码),支持模板引擎、有超多自定义配置等。

  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )。支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词 。

  • 内置分页插件:基于 Mybatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询。内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询 。内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作。

  • 默认将实体类的类名查找数据库中的表,使用@TableName(value=“table1”)注解指定表名,@TableId指定表主键,若字段与表中字段名保持一致可不加注解。

    Mybatis-Plus(MP)在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率。但它也提供了一些很有意思的插件,比如SQL性能监控、乐观锁、执行分析等。

举个比较生动的例子,就是如果Mybatis Plus是扳手,那Mybatis Generator就是生产扳手的工厂,像极了设计模式中的简单工厂模式。
MyBatis:一种操作数据库的框架,提供一种Mapper类,支持让你用java代码进行增删改查的数据库操作,省去了每次都要手写sql语句的麻烦。但是!有一个前提,你得先在xml中写好sql语句,也是很麻烦的。
MyBatis-Plus的存在就是为了稍稍弥补Mybatis的不足。在我们使用Mybatis时会发现,每当要写一个业务逻辑的时候都要在DAO层写一个方法,再对应一个SQL,即使是简单的条件查询、即使仅仅改变了一个条件都要在DAO层新增一个方法,针对这个问题, MyBatis-Plus就提供了一个很好的解决方案,它可以让我们避免许多重复性的工作。

<think>嗯,我现在需要弄清楚MyBatis依赖MyBatis-Plus依赖之间的区别。首先,我应该回忆一下这两个框架的基本信息。 MyBatis是一个持久层框架,它通过XML或注解来配置映射原生信息到数据库记录。它简化了JDBC代码,处理了参数设置结果集映射,但用户还是需要自己写SQL语句。比如,我之前用MyBatis的时候,每个Mapper接口都要写对应的XML文件,虽然灵活,但有时候感觉挺繁琐的。 然后听说MyBatis-PlusMyBatis的增强工具,在保留原有功能的基础上做了扩展。可能MyBatis-Plus提供了更多的便利功能,比如自动生成代码或者内置的CRUD方法。这样的话,开发者可能不需要写那么多重复的SQL了,比如基本的增删改查可以直接调用现成的方法。 接下来,我需要详细比较两者的核心功能差异。MyBatis的核心功能是SQL映射,而MyBatis-Plus可能在此基础上添加了自动CRUD、分页插件、代码生成器等功能。比如,MyBatis-Plus的BaseMapper接口可能已经提供了insert、selectById等方法,不需要自己写这些简单操作的SQL。 另外,关于配置方面,MyBatis需要配置数据源、事务管理器、Mapper扫描等,而MyBatis-Plus可能简化了这些配置,或者提供了默认配置。比如,在Spring Boot中集成MyBatis-Plus可能只需要添加依赖少量配置即可,自动注入各种组件。 性能方面,两者应该差不多,因为MyBatis-Plus是在MyBatis的基础上进行扩展,并没有改变底层的执行机制。不过,需要确认是否有额外的性能开销,比如分页插件是否会影响效率,但一般来说,这些增强功能设计时应该考虑到了性能优化。 适用场景方面,MyBatis适合需要高度定制SQL、对SQL有严格控制的场景,而MyBatis-Plus适合快速开发,减少样板代码,提高开发效率。比如在开发后台管理系统时,大量的CRUD操作用MyBatis-Plus会更高效。 另外,MyBatis-Plus提供了一些MyBatis没有的特性,比如逻辑删除、自动填充字段(如创建时间、更新时间)、乐观锁插件等。这些功能在MyBatis中需要手动实现,而MyBatis-Plus内置支持,减少了开发时间。 还需要考虑两者在依赖管理上的区别MyBatis-Plus的依赖是否包含了MyBatis的核心库,还是需要单独引入。通常,添加MyBatis-Plus依赖会自动引入MyBatis,所以不需要额外添加MyBatis的依赖。但有时候可能存在版本兼容性问题,需要注意版本匹配。 例如,在Maven项目中,引入MyBatis-Plus的starter可能会自动处理这些依赖关系,而使用MyBatis的话,可能需要单独引入MyBatis的依赖以及与Spring整合的库。 总结来说,MyBatis-PlusMyBatis的基础上提供了更多开箱即用的功能,简化了开发流程,而MyBatis则更注重灵活性对SQL的直接控制。选择哪一个取决于项目需求,如果需要快速开发且不需要复杂的SQL,MyBatis-Plus更合适;如果需要高度定制化的SQL,或者项目已经基于MyBatis构建,可能继续使用MyBatis更好。</think>MyBatis MyBatis-PlusJava 中常用的持久层框架,二者核心区别在于 **功能扩展开发效率**。以下是逐步对比分析: --- ### 一、核心定位差异 1. **MyBatis** - **定位**:基础 ORM 框架,提供 SQL 与 Java 对象的映射能力。 - **特点**:需手动编写 SQL DAO 层代码,灵活性高,但重复工作较多(如 CRUD 操作)。 - **代码示例**: ```java // Mapper 接口需手动定义方法 public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User selectById(Long id); } ``` 2. **MyBatis-Plus** - **定位**:MyBatis 的增强工具,**保留 MyBatis 所有功能**,额外提供自动化能力。 - **特点**:内置通用 CRUD、代码生成器、分页插件等,减少约 80% 的手动编码。 - **代码示例**: ```java // 继承 BaseMapper 即可直接使用预置方法 public interface UserMapper extends BaseMapper<User> {} ``` --- ### 二、核心功能对比 | **功能** | **MyBatis** | **MyBatis-Plus** | |-----------------------|-------------------|-------------------------------------------| | **基础 CRUD** | 需手动编写 SQL | 内置通用方法(如 `selectById()`, `insert()`) | | **代码生成器** | 无 | 支持自动生成 Entity、Mapper、Service 等代码 | | **分页插件** | 需手动实现 | 内置分页插件(`Page<T>`, `IPage<T>`) | | **逻辑删除** | 需手动处理 | 通过注解 `@TableLogic` 一键配置 | | **字段自动填充** | 无 | 支持 `@TableField(fill = FieldFill.INSERT)` | | **乐观锁** | 需手动实现 | 内置 `@Version` 注解支持 | --- ### 三、依赖配置区别 1. **MyBatis 依赖**(Maven) ```xml <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.10</version> </dependency> ``` 2. **MyBatis-Plus 依赖**(Maven) ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency> ``` - **注意**:MyBatis-Plus 依赖已包含 MyBatis 核心,**无需重复引入**。 --- ### 四、适用场景 1. **选择 MyBatis** - 需要高度定制复杂 SQL。 - 项目已深度使用 MyBatis,无改造计划。 2. **选择 MyBatis-Plus** - 追求开发效率,减少重复代码(如后台管理系统)。 - 需要快速集成分页、逻辑删除等通用功能。 --- ### 五、性能对比 - **执行效率**:二者底层均基于 MyBatis,性能差异可忽略。 - **开发效率**:MyBatis-Plus 显著更高(尤其在简单 CRUD 场景)。 --- ### 总结 - **MyBatis**:灵活控制 SQL,适合复杂查询场景。 - **MyBatis-Plus**:开箱即用,适合快速开发,建议新项目优先选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值