SqlHelper发布——比你期望的还要多的多(例如比MyBatis-Pagehelper性能更高)
SqlHelper发布——比Mybatis-PageHelper性能更高
起源
前段时间开启了一个新的项目,在选择分页插件时,发现github上很流行的一个是pagehelper,在百度上搜索了一下,使用量。由于项目紧急,所先拿来用了。但是我知道它并不适合我们。原因是它有如下几个缺点:
1) 对国产数据库支持不足
2) 扩展不方便
3) 配置复杂
4) 性能底下 (不要喷我, 因为它不是用的占位符?,发挥不了PrepareSatement的优势)
5) 只支持MyBatis
鉴于它的这些不足,我就趁闲暇时间新开发了一款解决上述缺点的分页工具,它已经在公司里的两个项目得到了验证。但它不仅仅是个分页工具那么简单,目前支持的特性有Pagination、UrlParser,未来会支持更多特性。
关键特性
- 支持MyBatis, JFinal,Ebean,Mango
- 支持 90+ 种数据库, 支持列表参见 here. 包含了几乎所有的国产数据库:
- TiDB (北京平凯星辰科技))
- Doris (Apache Doris,百度研发)
- MaxCompute (阿里巴巴)
- K-DB (浪潮)
- GBase (南大通用)
- DM (达梦)
- OSCAR (神州通用)
- HighGo (瀚高)
- KingBase (金仓)
- OpenBase (东软)
- SequoiaDB (巨杉)
如果你想知道所有的数据库排名的话,你可以在这里找到: DB Engines.
- 同一个应用中支持多种数据库
- 不需要配置dialect,可以自动的获取。
- 比 Mybatis-PageHelper性能更高, 原因是limit , offset等参数使用 PrepareStatement placeholder '?' , Mybatis是硬编码拼接的
- 通过Java SPI的方式支持了插件
- 支持 spring boot 1.x , 2.x
- 支持 mybatis 3.x
- 支持 JDK6+
Vs Pagehelper
|
metric |
mybatis-pagehelper |
sqlhelper |
|
databases |
13 |
90+ |
|
multiple databases in runtime |
√ |
√ |
|
auto detect dialect |
√ |
√ |
|
plugin |
√ |
√ |
|
PrepareStatement with '?' |
X |
√ |
|
mybatis |
3.x |
3.x |
|
spring boot |
1.x, 2.x |
1.x, 2.x |
|
JDK |
1.6+ |
1.6+ |
|
jFinal |
X |
√ |
|
EBean |
X |
√ |
|
Mango |
X |
√ |
|
国产数据库 |
X |
√ (参见上述列表) |
安装
可以在多种场景下使用,支持MyBatis,JFinal,EBean等。先就说说MyBatis下如何使用:
1) 与Mybatis + SpringBoot结合使用
此应用环境下,只需导入下列包即可:
<dependency>
<groupId>com.github.fangjinuo.sqlhelper</groupId>
<artifactId>sqlhelper-mybatis-spring-boot-autoconfigure</artifactId>
<version>${sqlhelper.version}</version>
</dependency>
<dependency>
<groupId>com.github.fangjinuo.sqlhelper</groupId>
<artifactId>sqlhelper-mybatis-spring-boot-starter</artifactId>
<version>${sqlhelper.version}</version>
</dependency>
2)与MyBatis (无spring boot)结合使用
此应用环境下,使用也不麻烦。
第一步,导入依赖:
<dependency>
<groupId>com.github.fangjinuo.sqlhelper</groupId>
<artifactId>sqlhelper-dialect</artifactId>
<version>${sqlhelper.version}</version>
</dependency>
第二步:配置插件:
<configuration>
...
<databaseIdProvider type="DB_VENDOR">
<property name="SQL Server" value="sqlserver"/>
<property name="DB2" value="db2"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>
...
<settings>
...
<setting name="defaultScriptingLanguage" value="com.jn.sqlhelper.mybatis.plugins.pagination.CustomScriptLanguageDriver" />
...
</settings>
...
</configuration> <plugins>
<plugin interceptor="com.jn.sqlhelper.mybatis.plugins.pagination.MybatisPaginationPlugin" />
</plugins>
使用
@GetMapping
public PagingResult list(){
User queryCondtion = new User();
queryCondtion.setAge(10);
PagingRequest request = new PagingRequest()
.setPageNo(1)
.setPageSize(10);
PagingRequestContextHolder.getContext().setPagingRequest(request);
List users = userDao.selectByLimit(queryCondtion);
request.getResult().setItems(users);
return request.getResult();
}
从mybatis-pagehelper迁移
为了兼容已有的应用,特意提供了从mybatis-pagehelper迁移工具。使用也很简单,把mybatis-pagehelper.jar移除,导入下面的包即可。
<dependency>
<groupId>com.github.fangjinuo.sqlhelper</groupId>
<artifactId>sqlhelper-mybatis-over-pagehelper</artifactId>
<version>${sqlhelper.version}</version>
</dependency>
支持
https://github.com/fangjinuo/sqlhelper
更高版本、更简易的用法,可以去GitHub (wiki, turtoial, 支持QQ群)
SqlHelper发布——比你期望的还要多的多(例如比MyBatis-Pagehelper性能更高)的更多相关文章
- SqlHelper发布—比Pagehelper更好用的分页插件
SqlHelper发布-比PageHelper性能更高 起源 前段时间开启了一个新的项目,在选择分页插件时,发现github上很流行的一个是pagehelper,在百度上搜索了一下,使用量.由于项目紧 ...
- 在VS 一切正常,发布到IIS出现问题 [System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本]
在VS 一切正常,发布到IIS出现问题 [System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本] 前提条件: 在vs 开发的时候,一 ...
- .NET 6 Preview 1 发布
前言 2021 年 2 月 17 日微软发布了 .NET 6 的 Preview 1 版本,那么来看看都有什么新特性和改进吧,由于内容太多了因此只介绍一些较为重点的项目. 统一和扩展 .NET 6 在 ...
- JDK 15已发布,你所要知道的都在这里!
JDK 15已经在2020年9月15日发布!详情见 JDK 15 官方计划.下面是对 JDK 15 所有新特性的详细解析! 官方计划 2019/12/12 Rampdown Phase One (fo ...
- 【理论面试篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题
##2017.10.30收集 面试技巧 5.1 面试形式 1) 一般而言,小公司做笔试题:大公司面谈项目经验:做地图的一定考算法 2) 面试官喜欢什么样的人 ü 技术好. ...
- 关于Mongodb的全面总结
MongoDB的内部构造<MongoDB The Definitive Guide> MongoDB的官方文档基本是how to do的介绍,而关于how it worked却少之又少,本 ...
- [转帖]从Intel和ARM争霸,谈芯片前世今生
从Intel和ARM争霸,谈芯片前世今生 http://www.itpub.net/2019/07/24/2476/ 长文预警, 写的非常好.. 我尽量写得轻松一些,因为其实这个话题很有趣,仔细探究起 ...
- Java中9种常见的CMS GC问题分析与解决
1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...
- 剖析虚幻渲染体系(13)- RHI补充篇:现代图形API之奥义与指南
目录 13.1 本篇概述 13.1.1 本篇内容 13.1.2 概念总览 13.1.3 现代图形API特点 13.2 设备上下文 13.2.1 启动流程 13.2.2 Device 13.2.3 Sw ...
随机推荐
- 浏览器记住密码的自动填充Input问题完美解决方案
1.input 前from和input占位隐藏 <form style="width:0;height:0;display:none;"> <input type ...
- Spring源码解析系列汇总
相信我,你会收藏这篇文章的 本篇文章是这段时间撸出来的Spring源码解析系列文章的汇总,总共包含以下专题.喜欢的同学可以收藏起来以备不时之需 SpringIOC源码解析(上) 本篇文章搭建了IOC源 ...
- Spring Boot的注解,你知道或者不知道的都在这里!
1.1 定义 Annotation(注解),用于为Java代码提供元数据.简单理解注解可以看做是一个个标签,用来标记代码.是一种应用于类.方法.参数.变量.构造器及包的一种特殊修饰符. 1.2 注解的 ...
- 高强度学习训练第九天总结:5道剑指offer的题目
实在不想看JVM了.刷几道剑指Offer的题,今天就水一水吧,脑子迷糊. 1.二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增 ...
- DDoS攻击工具
DDoS攻击工具 综合性工具 综合性工具除了可以进行DDoS攻击外,还可用于其他的用途,例如:端口扫描.安全审计.防火墙等.实际上,大部分综合性工具开发的原始目的并不是用于DDoS,而是"网 ...
- DOJO之gridx
GridX简介 Gridx是IBM公司的职员对Dojo中的Grid进行进一步扩展的组件,但是它是重新开发了Grid而不是继承Grid. 虽然同样都是基于Dojo store, 但与DataGrid/E ...
- [b0006] Spark 2.0.1 伪分布式搭建练手
环境: 已经安装好: hadoop 2.6.4 yarn 参考: [b0001] 伪分布式 hadoop 2.6.4 准备: spark-2.0.1-bin-hadoop2.6.tgz 下载地址: ...
- [b0005] Linux 系统常用操作命令
1 Ubuntu 解压 hadoop@ssmaster:~$ -bin-hadoop2..tgz 联网安装程序包 sudo apt-get install php
- nfs共享文件系统
NFS服务简介 NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的. 它最大的功能就是可以透过网络,让不同的机器.不同的操作系统.可以彼此分享个别的档 ...
- [Linux] 纯净ubuntu系统仓库更换为阿里云的源
1.先apt-get update一下当前默认的源,更新完成后先把vim命令安装一下,再修改源仓库为阿里云,否则无法直接编辑文件 2.先添加阿里云的源,编辑文件/etc/apt/sources.lis ...