首页 > 其他分享 >超越 Mybatis-Plus?超强 ORM 框架横空出世!

超越 Mybatis-Plus?超强 ORM 框架横空出世!

时间:2023-07-28 10:05:21浏览次数:48  
标签:Flex testPlusSelectTop10 testFlexSelectTop10 --------------- MyBatis ORM Plus te

点击“终码一生”,关注,置顶公众号

每日技术干货,第一时间送达!


1、MyBatis-Flex 是什么


MyBatis-Flex 是一个优雅的 MyBatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper^亮点 帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。

总而言之,MyBatis-Flex 能够极大地提高我们的开发效率和开发体验,让我们有更多的时间专注于自己的事情。


2、特征


  • 轻量:除了 MyBatis,没有任何第三方依赖轻依赖、没有任何拦截器,其原理是通过 SqlProvider 的方式实现的轻实现。同时,在执行的过程中,没有任何的 Sql 解析(Parse)轻运行。这带来了几个好处:1、极高的性能;2、极易对代码进行跟踪和调试;3、把控性更高。
  • 灵活:支持 Entity 的增删改查、以及分页查询的同时,MyBatis-Flex 提供了 Db + Row^灵活 工具,可以无需实体类对数据库进行增删改查以及分页查询。与此同时,MyBatis-Flex 内置的 QueryWrapper^灵活 可以轻易的帮助我们实现 多表查询、链接查询、子查询 等等常见的 SQL 场景。
  • 强大:支持任意关系型数据库,还可以通过方言持续扩展,同时支持 多(复合)主键、逻辑删除、乐观锁配置、数据脱敏、数据审计、 数据填充 等等功能。


3、开始使用


在开始之前,我们假定您已经:

  • 熟悉 Java 环境配置及其开发
  • 熟悉 关系型 数据库,比如 MySQL
  • 熟悉 Spring Boot 及相关框架
  • 熟悉 Java 构建工具,比如 Maven


4、Maven 依赖


Spring Boot 场景


<dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-spring-boot-starter</artifactId>
    <version>1.5.3</version>
</dependency>

<dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-processor</artifactId>
    <version>1.5.3</version>
    <scope>provided</scope>
</dependency>


5、同类框架「功能」对比


MyBatis-Flex 主要是和 MyBatis-Plus 与 Fluent-MyBatis 对比,

  • MyBatis-Plus:老牌的 MyBatis 增强框架,开源于 2016 年。
  • Fluent-MyBatis:阿里云开发的 MyBatis 增强框架(来自于阿里云·云效产品团队)


超越 Mybatis-Plus?超强 ORM 框架横空出世!_数据库

超越 Mybatis-Plus?超强 ORM 框架横空出世!_SQL_02


测试列表(List)数据查询


要求返回的数据为 10 条数据。

MyBatis-Flex 的代码如下:


QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.where(FLEX_ACCOUNT.ID.ge(100).or(FLEX_ACCOUNT.USER_NAME
.eq("admin" + ThreadLocalRandom.current().nextInt(10000))))
.limit(10);
mapper.selectListByQuery(queryWrapper);


MyBatis-Plus 的代码如下:


QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.ge("id", 100);
queryWrapper.or();
queryWrapper.eq("user_name", "admin" + ThreadLocalRandom.current().nextInt(10000));
queryWrapper.last("limit 10");
mapper.selectList(queryWrapper);


10 轮的测试结果:


---------------
>>>>>>>testFlexSelectTop10:90
>>>>>>>testPlusSelectTop10WithLambda:743
>>>>>>>testPlusSelectTop10:678
---------------
>>>>>>>testFlexSelectTop10:85
>>>>>>>testPlusSelectTop10WithLambda:692
>>>>>>>testPlusSelectTop10:684
---------------
>>>>>>>testFlexSelectTop10:84
>>>>>>>testPlusSelectTop10WithLambda:692
>>>>>>>testPlusSelectTop10:670
---------------
>>>>>>>testFlexSelectTop10:85
>>>>>>>testPlusSelectTop10WithLambda:737
>>>>>>>testPlusSelectTop10:667
---------------
>>>>>>>testFlexSelectTop10:85
>>>>>>>testPlusSelectTop10WithLambda:691
>>>>>>>testPlusSelectTop10:684
---------------
>>>>>>>testFlexSelectTop10:97
>>>>>>>testPlusSelectTop10WithLambda:760
>>>>>>>testPlusSelectTop10:666
---------------
>>>>>>>testFlexSelectTop10:80
>>>>>>>testPlusSelectTop10WithLambda:673
>>>>>>>testPlusSelectTop10:637
---------------
>>>>>>>testFlexSelectTop10:81
>>>>>>>testPlusSelectTop10WithLambda:653
>>>>>>>testPlusSelectTop10:639
---------------
>>>>>>>testFlexSelectTop10:82
>>>>>>>testPlusSelectTop10WithLambda:659
>>>>>>>testPlusSelectTop10:636
---------------
>>>>>>>testFlexSelectTop10:81
>>>>>>>testPlusSelectTop10WithLambda:654
>>>>>>>testPlusSelectTop10:656


测试结论


MyBatis-Flex 的查询 10 条数据的速度,大概是 MyBatis-Plus 的 5~10 倍左右。


6、支持的数据库类型


MyBatis-Flex 支持的数据库类型,现在市面上的数据库几乎全部支持,我们还可以通过自定义方言的方式,持续添加更多的数据库支持。


数据库方言


在某些场景下,比如用户要实现自己的 SQL 生成逻辑时,我们可以通过实现自己的方言达到这个目的,实现方言分为两个步骤:


1、编写自己的方言类,实现 IDialect 接口

2、通过 DialectFactory.registerDialect() 方法注册自己的方言


标签:Flex,testPlusSelectTop10,testFlexSelectTop10,---------------,MyBatis,ORM,Plus,te
From: https://blog.51cto.com/zhongmayisheng/6878381

相关文章

  • WinForm RichTextBox 加载大量文本卡死和UTF-8乱码问题
    在RichTextBox控件的使用中我们会遇到加载TXT文件的问题,通常我们会有两种处理方式。一、加载TXT字符串,设置到RichTextBox//打开并且读取文件数据FileStreamfs=newFileStream(txtPath,FileMode.Open,FileAccess.Read);StreamReadersr=newStreamReader(fs,Encoding.U......
  • Mybatis-plus学习
    简介:MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。架包依赖<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version></dependency><dependency> <groupId>org.......
  • Django2配置文件、pycharm连接数据库、Django链接mysql、orm
    配置文件介绍(setting.py)注册应用的INSTALLED_APPS中间件MIDDLEWARE根路由文件名ROOT_URLCONFDjango连接数据库的DATABASES语言和时间LANGUAGE_CODE='zh-hans'TIME_ZONE='Asia/Shanghai'静态文件的配置以登录功能表单(form)的属性action参......
  • CF623E Transforming Sequence
    难点在于卡__int128(?)。首先\(N>K\)显然无解,只需考虑\(N\leK\)的情况。然而这并没有什么用。把\(b\)看作集合,显然\(b_i\subsetb_{i+1}\)。所以令\(f_{n,i}\)为考虑到\(b_n\)且\(|b_n|=i\)的方案数,集合元素无序,即选择\(\{A,B,C\}\)或者\(\{A,B,D\}\in\{A,B,C,D......
  • C# string.format格式说明
    stringstr1=string.Format("{0:N1}",56789);//result:56,789.0stringstr2=string.Format("{0:N2}",56789);//result:56,789.00stringstr3=string.Format("{0:N3}",56789);//result:56,78......
  • PhpStorm 2023 for Mac永久激活版下载(免登陆版)
    Phpstorm是一款由JetBrAIns开发的PHP集成开发环境(IDE)。它提供了许多功能来简化PHP应用程序开发,包括代码编辑、调试、代码分析、测试和版本控制等。PhpStorm2023forMac永久激活版下载 以下是Phpstorm的一些主要特点:代码编辑器:Phpstorm具有智能代码编辑器,支持语法高亮、代......
  • multi-GPU环境下的batch normalization需要特殊实现吗?
    3年前曾经写过关于分布式环境下batchnormalization是否需要特殊实现的讨论:batchnormalization的multi-GPU版本该怎么实现?【Tensorflow分布式PS/Worker模式下异步更新的情况】  当时我给出的观点就是在多卡环境下batchnormalization使用每个step内的各显卡batch上......
  • VBA利用transform函数和ADO实现交叉汇总
    VBA中transform函数基本语法:Createsacrosstabquery.SyntaxTRANSFORMaggfunctionselectstatementPIVOTpivotfield[IN(value1[,value2[,...]])]TheTRANSFORMstatementhastheseparts: 假设存在三列数据:受理人、受理日期、业务量,怎么变成表:受理人、(按照受......
  • Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]
    @RequestParam用来处理Content-Type为application/x-www-form-urlencoded编码的内容,Content-Type默认为该属性。可以用于接收URL中的参数并捆绑到方法的参数中,也可以接受post请求体中的Content-Type为application/x-www-form-urlencoded的数据。(post比较常用的是json格式......
  • 使用@JsonFormat引起的时间比正常时间慢8小时解决方法
    转:使用@JsonFormat引起的时间比正常时间慢8小时解决方法 @JsonFormat,默认情况下timeZone为GMT(即标准时区),所以会造成输出少8小时。改为北京时间,方式如下:@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss",timezone="GMT+8")      ......