参考文献链接 :https://blog.csdn.net/liuduke1/article/details/108246383
Mybatis与Mybatis-Plus实现及区别详解
摘要:本文将详细介绍Mybatis和Mybatis-Plus的实现原理以及它们之间的区别。通过文字和图片并茂的方式,帮助读者更好地理解这两种持久层框架。
目录
一、Mybatis简介
1.1 Mybatis概述
Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程。Mybatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
MyBatis是一款基于Java语言的优秀持久层框架,它消除了几乎所有的JDBC代码和MyBatis是一款基于Java语言的优秀持久层框架,它消除了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程。MyBatis支持定制化SQL、存储过程以及高级映射,可以通过简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
此外,MyBatis的前身是iBATIS,最早在2002年由Clinton Begin首次发布。在2010年5月,该项目由iBATIS更名为MyBatis,并推出了第一版MyBatis 3,引起了广泛的应用和关注。
总的来说,MyBatis由于其强大的功能和优秀的性能,已经成为Java开发中常用的持久层框架之一。
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
以下是MyBatis的一些主要特点:
1. **灵活** :MyBatis不会对SQL进行封装,因此你可以直接编写原始的SQL语句,或者使用存储过程。
2. **易于理解和维护** :MyBatis的配置文件和映射文件都是纯文本格式,易于阅读和修改。
3. **解耦** :MyBatis将SQL语句与Java代码分离,降低了耦合度。
4. **动态SQL** :MyBatis支持动态SQL,可以根据不同的条件生成不同的SQL语句。
5. **缓存机制** :MyBatis提供了一级缓存和二级缓存,可以有效地减少数据库访问次数,提高查询效率。
6. **插件机制** :MyBatis提供了插件机制,可以在不修改核心代码的情况下,为MyBatis添加额外的功能。
要使用MyBatis,你需要在你的项目中添加MyBatis的依赖,然后创建一个配置文件(mybatis-config.xml),定义数据源、事务管理器等。接着,你可以创建映射文件(mapper.xml),定义SQL语句和结果映射。最后,在你的Java代码中,通过SqlSessionFactory创建SqlSession,然后通过SqlSession执行SQL语句。
1.2 Mybatis实现原理
Mybatis的实现原理主要有以下几个步骤:
1. 加载配置文件和映射文件,创建一个SqlSessionFactory对象。
2. 通过SqlSessionFactory创建SqlSession对象。
3. SqlSession通过Executor执行SQL语句,最终将结果返回给Mapper接口。
在深入理解Mybatis的运行原理时,可以结合JDBC来理解。JDBC有四个核心对象:DriverManager,用于注册数据库连接;Connection,与数据库建立连接;Statement,执行SQL语句并获取结果集;ResultSet,存储查询结果。
总的来说,Mybatis底层实现原理主要是通过SqlSessionFactory创建SqlSession对象,然后通过Executor执行SQL语句,最后将结果返回给Mapper接口。这个过程涉及到了MyBatis的整体架构和流程的分析、SQL的解析过程、手写解析流程、手写执行流程等内容。
Mybatis的实现原理主要包括以下几个步骤:
1. 加载配置文件:Mybatis首先会加载配置文件,包括全局配置文件、映射文件等。
2. 解析映射文件:Mybatis会解析映射文件中的SQL语句,将其封装成MappedStatement对象。
3. 编译SqlSessionFactory:Mybatis会编译SqlSessionFactory,生成执行SQL语句所需的对象。
4. 创建SqlSession:Mybatis会根据SqlSessionFactory创建SqlSession对象,用于执行SQL语句。
5. 执行SQL语句:Mybatis会通过SqlSession对象执行SQL语句,并将结果返回给调用者。
MyBatis实现原理主要包括以下步骤:
1. 配置文件:MyBatis通过读取XML配置文件来获取数据库连接信息、SQL语句等信息,然后将这些信息配置到MyBatis的核心对象中。
2. 映射文件:MyBatis将SQL语句与Java代码进行映射,通过配置文件将SQL语句与Java方法进行绑定。这种映射方式使得开发人员可以使用普通的Java对象和简单的XML或注解来配置和映射原生信息。
3. SqlSessionFactory:SqlSessionFactory是MyBatis的核心对象之一,它是创建SqlSession的工厂。SqlSessionFactory负责初始化MyBatis的所有配置信息,包括数据库连接信息、映射文件等。
4. SqlSession:SqlSession是MyBatis的另一个核心对象,它是执行SQL语句的主要入口。SqlSession提供了许多执行SQL语句的方法,如selectOne、selectList等。开发人员可以通过SqlSession来获取Mapper接口的实现类,然后调用其方法来执行SQL语句。
5. Executor:Executor是MyBatis的执行器,它负责执行SQL语句并返回结果。Executor会根据映射文件中定义的SQL语句类型(如SELECT、INSERT等)来调用相应的方法来执行SQL语句。
6. 映射器:映射器是MyBatis的另一个核心对象,它是Mapper接口的实现类。映射器负责将SQL语句与Java方法进行映射,并通过Java反射机制将SQL语句与Java方法进行调用,从而实现对数据库的操作。
总的来说,MyBatis的底层操作封装了JDBC的API,它的工作原理以及核心流程与JDBC的使用步骤一脉相承,这使得开发人员可以通过熟悉JDBC来深入理解MyBatis的工作原理。
二、Mybatis-Plus简介
2.1 Mybatis-Plus概述
Mybatis-Plus,简称MP,是针对Mybatis的增强工具。其核心设计理念是在不改变Mybatis原有结构的基础上进行功能增强,旨在简化开发过程、提升开发效率。
Mybatis-Plus提供了许多实用的功能和方便的方法,如基于注解的方式快速完成单表的CRUD操作、代码生成器、分页插件以及通用的Mapper接口等。这些特性的存在大大降低了开发人员的工作负担,提高了代码编写效率和整体开发效率。
值得一提的是,Mybatis-Plus具备无侵入性特点,即在引入后不会对现有工程产生任何影响,使用过程如丝般顺滑。同时,由于其启动后会自动注入基本的CURD操作,性能损耗几乎可以忽略不计,开发者可以直接面向对象进行操作。
此外,Mybatis-Plus通过实体类与数据库表的映射,让开发者无需编写复杂的SQL语句,从而简化了CRUD操作。这使得Mybatis-Plus尤其适用于单表的操作场景。
Mybatis-Plus是一个在Mybatis基础上进行增强的持久层框架,它简化了Mybatis的开发流程,提供了更多的便捷功能。Mybatis-Plus继承了Mybatis的所有特性,同时提供了自动分页、自动填充、通用Mapper等功能。
Mybatis-Plus,简称MP,是一个致力于提高开发效率和简化开发的Mybatis增强工具。其核心理念是在Mybatis的基础上进行增强,而不做任何改变。
Mybatis-Plus具有很多高效、实用且开箱即用的功能,包括但不限于自动分页、自动填充、通用Mapper、逻辑删除、性能分析等。这些功能大大减轻了开发人员的负担,提高了开发效率。同时,Mybatis-Plus保持了与原生Mybatis的良好兼容性,可以直接使用原生的SQL语句和映射文件,非常方便。
总的来说,Mybatis-Plus是一款强大的持久层框架增强工具,它充分借鉴并发扬了Mybatis的优点,又在此基础上进行了有效的增强和改进,使得开发更加便捷,效率更高。
2.2 Mybatis-Plus实现原理
Mybatis-Plus的实现原理主要基于Mybatis,旨在对其进行增强,以提高开发效率和简化开发过程。其核心理念是在不改变Mybatis原有结构的基础上进行功能增强。
Mybatis-Plus封装了许多实用的功能和方便的方法,如基于注解的方式快速完成单表的CRUD操作、代码生成器、分页插件以及通用的Mapper接口等。这些特性的存在大大降低了开发人员的工作负担,提高了代码编写效率和整体开发效率。
值得一提的是,Mybatis-Plus具备无侵入性特点,即在引入后不会对现有工程产生任何影响,使用过程如丝般顺滑。同时,由于其启动后会自动注入基本的CURD操作,性能损耗几乎可以忽略不计,开发者可以直接面向对象进行操作。
此外,Mybatis-Plus通过实体类与数据库表的映射,让开发者无需编写复杂的SQL语句,从而简化了CRUD操作。这使得Mybatis-Plus尤其适用于单表的操作场景。
在底层实现上,mybatis-plus提供了一个默认实现:DefaultSqlInjector。这个接口里面已经包含了一些mybatis-plus已经封装好的BaseMapper里面的方法,我们想要扩展的话,可以直接继承这个类来进行扩展添加我们的方法。
Mybatis-Plus的实现原理主要包括以下几个步骤:
1. 加载配置文件:Mybatis-Plus首先会加载配置文件,包括全局配置文件、映射文件等。
2. 解析映射文件:Mybatis-Plus会解析映射文件中的SQL语句,将其封装成MappedStatement对象。
3. 编译SqlSessionFactory:Mybatis-Plus会编译SqlSessionFactory,生成执行SQL语句所需的对象。
4. 创建SqlSession:Mybatis-Plus会根据SqlSessionFactory创建SqlSession对象,用于执行SQL语句。
5. 执行SQL语句:Mybatis-Plus会通过SqlSession对象执行SQL语句,并将结果返回给调用者。
Mybatis-Plus的实现原理主要包括以下部分:
1. 封装CRUD方法:Mybatis-Plus对常见的数据库操作进行了高度封装,如单表的CURD操作以及批量操作等。开发人员无需再编写繁琐的XML文件,直接调用这些方法即可完成数据库操作。
2. 自动分页插件:Mybatis-Plus提供了自动分页功能,可以自动完成分页查询操作,大大减轻了开发人员的工作负担。
3. 通用Mapper和BaseMapper:Mybatis-Plus提供了通用Mapper和BaseMapper接口,为开发人员提供了一套完整的CRUD操作解决方案。同时,其内部已经封装了一些常用的方法,如插入、更新、删除等,我们可以通过扩展DefaultSqlInjector类来添加自定义的方法。
4. 逻辑删除:Mybatis-Plus支持逻辑删除功能,它可以实现对数据的逻辑标记,而不会影响数据的物理删除。
5. 性能分析:Mybatis-Plus内置了性能分析器,可以对SQL语句进行性能分析,帮助开发人员优化SQL语句,提高系统的性能。
总的来说,Mybatis-Plus的实现原理主要是基于Mybatis的基础上进行增强,提供了许多高效、实用且开箱即用的功能,简化了开发流程,提高了开发效率。同时,Mybatis-Plus保持了与原生Mybatis的良好兼容性,可以直接使用原生的SQL语句和映射文件,非常方便。
三、Mybatis与Mybatis-Plus的区别
3.1 开发便捷性
Mybatis-Plus相对于Mybatis来说,提供了更多的便捷功能,如自动分页、自动填充、通用Mapper等。这些功能可以大大减少开发者的工作量,提高开发效率。而Mybatis需要开发者自己编写这些功能,相对来说较为繁琐。
3.2 学习成本
由于Mybatis-Plus提供了更多的便捷功能,因此学习成本相对较低。对于初学者来说,更容易上手。而Mybatis的学习成本相对较高,需要开发者对Mybatis的原理和细节有较深入的了解。
Mybatis和Mybatis-Plus都是Java的持久层框架,但它们在功能上存在一些主要的区别。Mybatis是一个封装了JDBC底层访问数据库的工具,它支持定制化SQL、存储过程以及高级映射。而Mybatis-Plus则是在Mybatis的基础上进行了功能扩展和增强的开源框架。
其中,Mybatis-Plus具备无侵入性特点,即在引入后不会对现有工程产生任何影响,使用过程如丝般顺滑。同时,由于其启动后会自动注入基本的CRUD操作,性能损耗几乎可以忽略不计,开发者可以直接面向对象进行操作。此外,Mybatis-Plus通过实体类与数据库表的映射,让开发者无需编写复杂的SQL语句,从而简化了CRUD操作。
总的来说,Mybatis-Plus提供了一种更简洁、高效的开发方式,特别适合于单表的操作场景。然而,对于一些复杂的查询或者多表联合查询,使用原生的Mybatis可能会更加灵活和方便。
3.3 性能差异
从性能上来说,Mybatis和Mybatis-Plus之间的差异并不明显。因为两者在底层都是基于Mybatis实现的,所以性能表现相近。但是,由于Mybatis-Plus提供了一些额外的功能,可能会导致一定程度的性能损耗。但这种损耗通常可以忽略不计。
Mybatis和Mybatis-Plus都是Java的持久层框架,但它们在功能和使用上存在一些区别。
Mybatis是一款非常优秀的持久层框架,它主要封装了JDBC底层访问数据库的操作,使开发者可以更加便捷地进行数据库操作。Mybatis支持定制化SQL、存储过程以及高级映射,为开发人员提供了强大的灵活性。然而,使用Mybatis进行开发可能需要编写大量的重复性代码,这在一定程度上增加了工作量。
相比之下,Mybatis-Plus则是在Mybatis的基础上进行了增强的工具。它提供了一系列高效、实用且开箱即用的功能,如自动分页、自动填充、通用Mapper和逻辑删除等,从而大大减轻了开发人员的工作负担。此外,Mybatis-Plus还支持无侵入、损耗小的CRUD操作和主键自动生成等特点,使得开发效率得到了显著提升。
总的来说,Mybatis和Mybatis-Plus各有其优势和不足。如果你需要更多的灵活性和控制权,或者对性能有较高要求,那么Mybatis可能是一个更好的选择。而如果你希望快速开发并减少重复性代码,那么Mybatis-Plus可能更适合你的需求。
四、总结和感悟
本文详细介绍了Mybatis和Mybatis-Plus的实现原理以及它们之间的区别。总的来说,Mybatis-Plus在开发便捷性和学习成本方面具有优势,而Mybatis在性能方面略有优势。在实际项目中,开发者可以根据自己的需求和团队的技术栈选择合适的持久层框架。
Mybatis和Mybatis-Plus都是Java的持久层框架,但它们在实现方式和功能支持上存在显著的区别。MyBatis主要基于XML或注解的方式进行数据库操作,提供了简单的CRUD操作和动态SQL生成等功能。而Mybatis-Plus则是在MyBatis的基础上进行了封装,只做增强不做改变,为简化开发、提高效率而生。
Mybatis-Plus提供了更多方便开发的功能,如分页查询、逻辑删除、乐观锁、代码生成等。特别是其自带的分页插件,只需简单的配置就可以实现分页功能。这些特性使得Mybatis-Plus在单表的操作场景下尤其适用,能够大大提高开发效率。
总的来说,Mybatis和Mybatis-Plus各有优势,选择使用哪个框架取决于具体的项目需求和开发环境。
Mybatis和Mybatis-Plus都是Java的持久层框架。Mybatis是一款非常优秀的持久层框架,它主要封装了JDBC底层访问数据库的操作,为开发者提供强大的灵活性,支持定制化SQL、存储过程以及高级映射。其功能架构分为三层:API接口层、数据处理层和基础支撑层。然而,使用Mybatis进行开发可能需要编写大量的重复性代码,这在一定程度上增加了工作量。
相比之下,Mybatis-Plus则是在Mybatis的基础上进行了增强的工具。Mybatis-Plus提供了一些特有功能来简化开发、提高开发效率,如自动分页、自动填充、通用Mapper和逻辑删除等。此外,Mybatis-Plus也支持无侵入、损耗小的CRUD操作和主键自动生成等特点。在使用Mybatis-Plus之后,既可以使用Mybatis-Plus的特有功能,又能够正常使用Mybatis的原生功能。
总的来说,Mybatis和Mybatis-Plus各有其优势和不足。如果你需要更多的灵活性和控制权,或者对性能有较高要求,那么Mybatis可能是一个更好的选择。而如果你希望快速开发并减少重复性代码,那么Mybatis-Plus可能更适合你的需求。
谢谢!!!