Mybatis-Plus对比Mybatis优点


MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis 。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis 使用简单的 XML 或注解来配置和映射基本体,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

MyBatis是iBatis的升级版,用法有很多的相似之处,但是MyBatis进行了重要的改进。例如:

1、Mybatis实现了接口绑定,使用更加方便。

在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。

2、对象关系映射的改进,效率更高

3、MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。

MyBatis的框架架构

 

对于IBatis与MyBatis的区别就不再多说了,感兴趣的朋友可以研究一下。

原理详解:

MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。

MyBatis的优缺点

优点就不说了,很长时间的框架了。有些项目还在用。

缺点:

1、编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。

2、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。

3、框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

4、二级缓存机制不佳。

 

Mybatis-Plus

学过mybatis的小伙伴肯定知道早期的mybatis需要写很多Mapper.xml文件,这种方式导致的缺陷也很明显。

由于需求导致 Entity需要增减一个字段,那么与此同时需要修改Mapper.xml文件。导致牵一发而动全身(总之麻烦!!)

在新版本mybatis3中虽然脱离了使用Mapper.xml文件,代替的方式是通过注解开发,把Sql语句写在了注解上。但是这种方式依然需要修改Sql语句(需要寻找注解),依然没有解决之前遗留的问题。

因此Mybatis-plus诞生了,它的出现就是为了解决这个问题,全过程中不需要写Sql代码,这样减少了开发工作量。

有用过MyBatis-Plus(简称MP)的都知道它是一个MyBatis的增强工具,旨在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生.

Mybatis Plus:国人团队苞米豆在Mybatis的基础上开发的框架,在Mybatis基础上扩展了许多功能,荣获了2018最受欢迎国产开源软件第5名。
Mybatis Plus Generator:同样为苞米豆开发,比Mybatis Generator更加强大,支持功能更多,自动生成Entity、Mapper、Service、Controller等。

特点:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

组件依赖:

首先我们要通过Maven引入mybatis-plus 开源组件,在pom.xml文件加入下面的代码:

 
 
    com.baomidou 
    mybatis-plus-boot-starter 
    3.4.0 
 
 
 
    com.baomidou 
    mybatis-plus-extension 
    3.4.0 
 

后面的自己百度就不说了,项目中自己集成。

 

比较

Mybatis-Plus是一个Mybatis的增强工具,它在Mybatis的基础上做了增强,却不做改变。我们在使用Mybatis-Plus之后既可以使用Mybatis-Plus的特有功能,又能够正常使用Mybatis的原生功能。Mybatis-Plus(以下简称MP)是为简化开发、提高开发效率而生,但它也提供了一些很有意思的插件,比如SQL性能监控、乐观锁、执行分析等。

Mybatis虽然已经给我们提供了很大的方便,但它还是有不足之处,实际上没有什么东西是完美的,MP的存在就是为了稍稍弥补Mybatis的不足。在我们使用Mybatis时会发现,每当要写一个业务逻辑的时候都要在DAO层写一个方法,再对应一个SQL,即使是简单的条件查询、即使仅仅改变了一个条件都要在DAO层新增一个方法,针对这个问题,MP就提供了一个很好的解决方案,之后我会进行介绍。另外,MP的代码生成器也是一个很有意思的东西,它可以让我们避免许多重复性的工作。.

 

总结

Mybatis-Plus简化了单表操作,不用写sql,一些复杂的单表sql也可以通过api搞出来,多表联合查询、一些复杂的sql,还是需要xml来实现

其实差别不大,只是有些简单的增删改查就没必要去写mapper.xml了而已,mp的接口已经定义了。还有就是多了一些api构造sql语句而已,核心东西没变。

看到很多同学都在说可以不用自己写xml,其实mybatis官方有提供代码生成器mybatis-generator,而且无侵入性,生成代码后,还是mybatis代码,没有多一层封装。很多同学用了MP才知道有代码生成器,其实mybatis官方也有。Mybatis Generator:自动为Mybatis生成简单的增删改查sql语句的工具。

MP就仿佛,你开着一辆名叫MyBayis的手动挡汽车,然后请了一个叫MP的人坐在副驾驶帮你挂档。

当然对于团队使用,管理严格的的项目,还是可以用MP的,应该他确实减少了很多的工作量。

原文链接:https://zhuanlan.zhihu.com/p/346009753