SqlHelper 发布 -- 比 Mybatis-PageHelper 性能更高
起源
前段时间开启了一个新的项目, 在选择分页插件时, 发现 GitHub 上很流行的一个是 pagehelper, 在百度上搜索了一下, 使用量. 由于项目紧急, 所先拿来用了. 但是我知道它并不适合我们. 原因是它有如下几个缺点:
1) 对国产数据库支持不足
2) 扩展不方便
3) 配置复杂
4) 性能底下 (不要喷我, 因为它不是用的占位符?, 发挥不了 PrepareSatement 的优势)
5) 只支持 MyBatis
鉴于它的这些不足, 我就趁闲暇时间新开发了一款解决上述缺点的分页工具, 它已经在公司里的两个项目得到了验证. 但它不仅仅是个分页工具那么简单, 目前支持的特性有 Pagination,UrlParser, 未来会支持更多特性.
关键特性
支持 MyBatis, JFinal,Ebean
支持 90+ 种数据库, 支持列表参见 here. 包含了几乎所有的国产数据库:
- TiDB (北京平凯星辰科技))
- Doris (Apache Doris, 百度研发)
- MaxCompute (阿里巴巴)
- K-DB (浪潮)
- GBase (南大通用)
- DM (达梦)
- OSCAR (神州通用)
- HighGo (瀚高)
- KingBase (金仓)
- OpenBase (东软)
- SequoiaDB (巨杉)
如果你想知道所有的数据库排名的话, 你可以在这里找到: DB Engines https://db-engines.com/en/ranking/relational+dbms .
同一个应用中支持多种数据库
不需要配置 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 | √ |
国产数据库 | 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.github.fangjinuo.sqlhelper.mybatis.plugins.pagination.CustomScriptLanguageDriver" />
- ...
- </settings>
- ...
- </configuration>
- <plugins>
- <plugin interceptor="com.github.fangjinuo.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
来源: https://www.cnblogs.com/f1194361820/p/10970125.html