MyBatis与MyBatis-plus的区别

一、MyBatis

        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的二级缓存

1.主要使用的标签有:

        1)、<select></select>对应注解@lSelect

        2)、<update></update>对应注解@Update

        3)、<insert></insert>对应注解@Insert

        4)、<delete></delete>对应注解@Delete

        5)、<where></where>:在某些条件根据入参有无决定是可使用以避免1=1这种写法,也会根据是否为where条件后第一个条件参数自动去除and

        6)、<if></if>:类似于java中的条件判断if,没有<else>标签

        7)、<choose>标签

        8)、<foreach></forwach>:可以对数组、Map或实现了Iterable接口(如List、Set)的对象遍历。可实现in、批量更新、批量插入等。

        9)、<resultMap></resultMap>:映射结果集

        10)、<resultType></resultType>:映射结果类型,可是java实体类或Map、List等类型。

2.优点:

        1)MyBatis封装了JBDC底层访问数据库的细节,使我们程序猿不需要与JDBC API打交道,就可以访问数据库。
        2)MyBatis简单易学,程序猿直接编写SQL语句,适合于对SQL语句性能要求比较高的项目。
        3)SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度。
        4)SQL代码从程序代码中彻底分离出来,可重用。
        5)提供了动态SQL标签,支持编写动态SQL。
        6)提供映射标签,支持对象与数据库的ORM字段关系映射。

3.缺点:

        1)过于依赖数据库SQL语句,导致数据库移植性差,更换数据库,如果SQL语句有差异,SQL语句工作量大。
        2)由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。
        3)字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null)
        4)DAO层过于简单,对象组装的工作量较大。
        5)不支持级联更新、级联删除。
        6)编写动态sql时,不方便调试,尤其逻辑复杂时。
        7)提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。
        8)使用不当,容易导致N+1的sql性能问题。
        9)使用不当,关联查询时容易产生分页bug。
        10)若不查询主键字段,容易造成查询出的对象有“覆盖”现象。
        11)参数的数据类型支持不完善。(如参数为Date类型时,容易报没有get、set方法,需在参数上加@param)
        12)多参数时,使用不方便,功能不够强大。(目前支持的方法有map、对象、注解@param以及默认采用012索引位的方式)
        13)缓存使用不当,容易产生脏数据。

二、MyBatis-plus

        MyBatis-plus是一款MyBatis的增强工具,在MyBatis 的基础上只做增强不做改变。其是国内团队苞米豆在MyBatis基础上开发的增强框架,扩展了一些功能,以提高效率。引入 Mybatis-Plus 不会对现有的 Mybatis 构架产生任何影响,而且 MyBatis-plus 支持所有 Mybatis 原生的特性

1.优点:

        1)依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring 。

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

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

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

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

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

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

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

        9)支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )。

        10)支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词 。

        11)内置分页插件:基于 Mybatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询。

        12)内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询 。

        13)内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作。

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

三、二者区别

        MyBatis:

                1)所有SQL语句全部自己写
                2)手动解析实体关系映射转换为MyBatis内部对象注入容器
                3)不支持Lambda形式调用

        Mybatis Plus:

                1)强大的条件构造器,满足各类使用需求
                2)内置的Mapper,通用的Service,少量配置即可实现单表大部分CRUD操作
                3)支持Lambda形式调用
                4)提供了基本的CRUD功能,连SQL语句都不需要编写
                5)自动解析实体关系映射转换为MyBatis内部对象注入容器

四、总结:

        Mybatis Plus的宗旨是简化开发,但是它在提供方便的同时却容易造成代码层次混乱,我们可能会把大量数据逻辑写到service层甚至contoller层中,使代码难以阅读。凡事过犹不及,在使用Mybatis Plus时一定要做分析,不要将所有数据操作都交给Mybatis Plus去实现。毕竟Mybatis Plus只是Mybatis的增强工具,它并没有侵入Mybatis的原生功能,在使用Mybatis Plus的增强功能的同时,原生Mybatis的功能依然是可以正常使用的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将SSM框架中的MyBatis升级到MyBatis-Plus是可行的,可以实现共存。SSM框架由Spring、Spring MVC和MyBatis组成,而MyBatis-Plus是对MyBatis的增强扩展。下面将介绍如何将它们共存。 首先,需要将MyBatis升级到MyBatis-Plus。可以将MyBatis-Plus的依赖项添加到项目的pom.xml文件中,替换原有的MyBatis依赖。然后,需要对原有的MyBatis配置文件进行修改。MyBatis-Plus提供了一些方便的功能和特性,如自动填充、逻辑删除等,可以根据项目需求选择开启或关闭。 在SSM框架中,MyBatis-Plus可以与原有的Spring框架和Spring MVC框架完美共存。Spring框架负责管理和配置各种Bean,MyBatis-Plus可以与Spring框架一起使用,将其作为DAO层的组件进行管理。在Spring的配置文件中,可以将MyBatis-Plus的配置文件加入到配置中。 在Spring MVC框架中,可以继续使用原有的控制器、服务和视图解析器等组件。MyBatis-Plus可以与Spring MVC框架无缝集成,通过Spring MVC接收请求,然后调用MyBatis-Plus进行数据访问和处理。 在具体开发过程中,可以利用MyBatis-Plus提供的一些特性简化开发工作。例如,可以使用MyBatis-Plus的代码生成器来自动生成DAO、实体类和Mapper等代码,减少手动编写的工作量。 总结来说,将SSM框架中的MyBatis升级到MyBatis-Plus是完全可以实现的,它们可以共存并完美集成。通过使用MyBatis-Plus,我们可以更加便捷地开发和管理数据库操作,提高开发效率和代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值