ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Mybatis-Plus对比Mybatis优点

2022-01-05 09:37:35  阅读:222  来源: 互联网

标签:xml mybatis MyBatis 优点 Plus MP 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文件加入下面的代码:

<!--mybatis--> 
<dependency> 
    <groupId>com.baomidou</groupId> 
    <artifactId>mybatis-plus-boot-starter</artifactId> 
    <version>3.4.0</version> 
</dependency> 
<!--mybatisplusextension, mybatispluscore--> 
<dependency> 
    <groupId>com.baomidou</groupId> 
    <artifactId>mybatis-plus-extension</artifactId> 
    <version>3.4.0</version> 
</dependency> 

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

 

比较

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

标签:xml,mybatis,MyBatis,优点,Plus,MP,Mybatis
来源: https://www.cnblogs.com/-X-peng/p/15765456.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有