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 ...
随机推荐
- [LeetCode#184]Department Highest Salary
The Employee table holds all employees. Every employee has an Id, a salary, and there is also a colu ...
- java 类内部定义接口
java类内部可以定义接口,作用可以看作是对类功能的进一步补充,类里面包含两部分:一部分是自己的固定的,一部分是可以变化的,而这可变的部分就编程了一个接口. 另一个作用是避免命名冲突. 示例 类Fru ...
- redis pipeline批量处理提高性能
Redis使用的是客户端-服务器(CS)模型和请求/响应协议的TCP服务器.Redis客户端与Redis服务器之间使用TCP协议进行连接,一个客户端可以通过一个socket连接发起多个请求命令.每个请 ...
- MySQL(9)---纪录一次实际开发过程中用到的复杂存储过程
Mysql(9)---纪录一次实际开发过程中用到的复杂存储过程 为了尽可能的还原当时为什么需要用到存储过程,下面我写了个详细的文档,我们可以从需求文档出发来分析. 有关存储过程之前也写了两篇文章来做铺 ...
- 关于yield和yield from
一.简单示例 def yield_func(): for _ in range(2): yield "12" def yield_from_func(): for _ in ran ...
- crm-1
1.crm 客户关系管理系统 :1.业务逻辑部分 2.权限插件 2.forms组件之modelform modelform就是model+form ,form根据model的字段生成标签 ,校验信息 ...
- 微信小程序json与xml互相转换
1.首先在目录结构中引入必要的js文件 https://files.cnblogs.com/files/qianyou304/x2j.rar 2.js中代码如下:(部分)json 2 xml var ...
- Ubuntu18.04安装配置
GPT硬盘安装Ubuntu 磁盘管理工具压缩一个5GB的Fat32的分区,然后将ISO文件解压到Fat32分区 利用Hasleo EasyUEFI工具添加EFI引导 *:\EFI\BOOT\grubx ...
- HDU 4729 An Easy Problem for Elfness(树链剖分边权+二分)
题意 链接:https://cn.vjudge.net/problem/HDU-4729 给你n个点,然你求两个点s和t之间的最大流.而且你有一定的钱k,可以进行两种操作 1.在任意连个点之间建立一个 ...
- 第15讲:嵌入式SQL语句(动态SQL)
一.动态SQL概述 1. 静态SQL vs 动态SQL ①动态SQL是相对静态SQL而言的 ②静态SQL特点:SQL语句在程序中已经按要求写好,只需要把一些参数通过变量传递给SQL语句即可 specN ...