{"id":13843390,"url":"https://github.com/bes2008/sqlhelper","last_synced_at":"2025-05-16T05:04:13.379Z","repository":{"id":35382185,"uuid":"185006901","full_name":"bes2008/sqlhelper","owner":"bes2008","description":"SQL Tools ( Dialect, Pagination, DDL dump, UrlParser, SqlStatementParser, WallFilter, BatchExecutor for Test) based Java. it is easy to integration into any ORM frameworks","archived":false,"fork":false,"pushed_at":"2025-02-15T01:45:33.000Z","size":4475,"stargazers_count":312,"open_issues_count":23,"forks_count":64,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-05-02T23:02:07.194Z","etag":null,"topics":["batchexecutor","dao","database","ddl","dialect","ebean","jdbc","jfinal","mango","mybatis","mybatis-pagehelper","orm","pagination","spring-boot","spring-jdbc","sql","urlparser"],"latest_commit_sha":null,"homepage":"https://github.com/fangjinuo/sqlhelper","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bes2008.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-05T09:04:56.000Z","updated_at":"2025-03-10T07:33:46.000Z","dependencies_parsed_at":"2024-10-10T05:31:13.858Z","dependency_job_id":"97813aa9-bd06-40df-9e0b-8dc54db560c1","html_url":"https://github.com/bes2008/sqlhelper","commit_stats":{"total_commits":1851,"total_committers":11,"mean_commits":"168.27272727272728","dds":0.2852512155591572,"last_synced_commit":"f4c1a3266b642efbd4958ca7a8dde9e62e2adaf3"},"previous_names":["fangjinuo/sqlhelper"],"tags_count":61,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bes2008%2Fsqlhelper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bes2008%2Fsqlhelper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bes2008%2Fsqlhelper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bes2008%2Fsqlhelper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bes2008","download_url":"https://codeload.github.com/bes2008/sqlhelper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254404350,"owners_count":22065641,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["batchexecutor","dao","database","ddl","dialect","ebean","jdbc","jfinal","mango","mybatis","mybatis-pagehelper","orm","pagination","spring-boot","spring-jdbc","sql","urlparser"],"created_at":"2024-08-04T17:02:06.521Z","updated_at":"2025-05-16T05:04:13.360Z","avatar_url":"https://github.com/bes2008.png","language":"Java","readme":"[![License](https://img.shields.io/badge/license-LGPL3.0-green.svg)](https://github.com/fangjinuo/sqlhelper/blob/master/LICENSE)\n\n[![Build Status](https://www.travis-ci.org/fangjinuo/sqlhelper.svg?branch=master)](https://travis-ci.org/fangjinuo/sqlhelper)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/9c27e94ffa3a4ee58279c36236b2b075)](https://www.codacy.com/manual/fs1194361820/sqlhelper?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=fangjinuo/sqlhelper\u0026amp;utm_campaign=Badge_Grade)\n\n[![JDK](https://img.shields.io/badge/JDK-1.6+-green.svg)](https://www.oracle.com/technetwork/java/javase/downloads/index.html)\n\n[![MyBatis](https://img.shields.io/badge/MyBatis-3.x-green.svg)](http://www.mybatis.org/mybatis-3/index.html)\n[![MyBatis](https://img.shields.io/badge/MyBatisPlus-3.x-green.svg)](http://www.mybatis.org/mybatisplus-3/index.html)\n[![jFinal](https://img.shields.io/badge/jFinal-3.x-green.svg)](https://github.com/jfinal/jfinal)\n[![jFinal](https://img.shields.io/badge/jFinal-4.x-green.svg)](https://github.com/jfinal/jfinal)\n[![EBean](https://img.shields.io/badge/Ebean-11.x-green.svg)](https://ebean.io/docs/query/sqlquery)\n[![Mango](https://img.shields.io/badge/Mango-1.6.x-green.svg)](https://github.com/jfaster/mango)\n[![Commons-DBUtils](https://img.shields.io/badge/Apache_Commons_DBUtils-1.7.x-green.svg)](http://commons.apache.org/proper/commons-dbutils/index.html)\n[![Solon](https://img.shields.io/badge/solon-1.x-green.svg)](https://github.com/noear/solon)\n\n\n[![Spring-Jdbc](https://img.shields.io/badge/SpringJdbc-2.x-green.svg)](https://spring.io/projects/spring-framework)\n[![Spring-Jdbc](https://img.shields.io/badge/SpringJdbc-3.x-green.svg)](https://spring.io/projects/spring-framework)\n[![Spring-Jdbc](https://img.shields.io/badge/SpringJdbc-4.x-green.svg)](https://spring.io/projects/spring-framework)\n[![Spring-Jdbc](https://img.shields.io/badge/SpringJdbc-5.x-green.svg)](https://spring.io/projects/spring-framework)\n\n[![SpringBoot](https://img.shields.io/badge/SpringBoot-1.x-green.svg)](https://spring.io/projects/spring-boot/)\n[![SpringBoot](https://img.shields.io/badge/SpringBoot-2.x-green.svg)](https://spring.io/projects/spring-boot/)\n\n[![maven](https://img.shields.io/badge/maven-v4.0.0-green.svg)](https://search.maven.org/search?q=g:com.github.fangjinuo.sqlhelper%20AND%20v:4.0.0)\n\n\n\n\n## [GitHub地址](https://github.com/fangjinuo)\n## [Gitee地址](https://gitee.com/fangjinuo)\n## [教程](./.wiki/index.md)\n\n# sqlhelper\nSQL Tools ( **Dialect**, **Pagination**, **DDL Dump**, **UrlParser**, **SqlStatementParser**, **WallFilter**, **BatchExecutor for Test**) based Java\n\n## modules\n|   module         | sqlhelper version | JDK | framework version| Description      |\n|------------------|-------------------|-----|------------------|------------------|\n|sqlhelper-dialect | 1.0+              |1.6+ |  |the core （绝大部分功能都离不开它）|\n|sqlhelper-cli | 2.0+                  |1.8+ | | CLI 命令行工具 |\n|sqlhelper-cli-assembly | 2.0+         |1.8+ | |为 CLI 命令行工具 提供打包功能|\n|sqlhelper-mybatis | 1.0+              |1.6+ | |提供对MyBatis的支持 (主要包括：通用分页、通用批量操作、多数据源) |\n|sqlhelper-mybatis-spring-boot | 1.0+  |1.6+ | | 为MyBatis + SqlHelper 提供了Spring Boot 快速启动|\n|sqlhelper-mybatis-over-pagehelper|1.0+|1.6+ | | 引入它就可以无缝的从 ***mybatis-pagehelper*** 迁移到 SqlHelper|\n|sqlhelper-jfinal  | 1.2+              |1.6+ |4.3+ | 对国产框架jfinal支持 (主要包括：通用分页) |\n|sqlhelper-ebean   | 1.2+              |1.6+ | | 对 ebean 支持(主要包括：通用分页)  |\n|sqlhelper-hibernate| 1.2+             |1.6+ | | 对 hibernate 支持(主要包括：通用分页) |\n|sqlhelper-mango   | 1.2+              |1.6+ | | 对 mango 支持 支持(主要包括：通用分页) |\n|sqlhelper-batchinsert|1.2+            |1.6+ | | 为了 **性能测试** 提供的批量入库工具 |\n|sqlhelper-springjdbc | 2.0.2+         |1.6+ |spring 4.0+ | 对 spring-jdbc 支持 (主要包括：通用分页)|\n|sqlhelper-springjdbc-spring-booter| 2.0.2+|1.8+| |对 spring-jdbc 应用提供了 Spring Boot 快速启动|\n|sqlhelper-mybatisplus-3|2.0.7+         |1.8+ | mybatis-plus 3.2.0+ |对 mybatis-plus 支持|\n|sqlhelper-mybatisplus-spring-boot-starter|2.0.7+ |1.8+ |mybatis-plus 3.1.2+  |对 mybatis-plus 应用提供了 Spring Boot 快速启动|\n|sqlhelper-mybatisplus-2|3.3.0+         |1.6+ | mybatis-plus 3.2.0+ |对 mybatis-plus 支持|\n|sqlhelper-mybatisplus_2x-spring-boot-starter|2.0.7+ |1.6+ |mybatis-plus 3.1.2+  |对 mybatis-plus 应用提供了 Spring Boot 快速启动|\n|sqlhelper-tkmapper-spring-boot-starterer|3.1.0+ |1.8+ | |对 tk.mybatis Mapper 应用提供了 Spring Boot 快速启动|\n|sqlhelper-dbutils | 2.2.0            |1.6+| |对 Apache Commons-DBUtils 支持 (主要包括：通用分页) |\n|sqlhelper-jsqlparser | 3.0.3          |1.6+| |对于要基于SQL Parser接口来完成的功能 由jsqlparser 这个库来实现|\n|sqlhelper-mybatis-solon-plugin|3.2.0|1.8+| |支持solon 框架|\n|sqlhelper-datasource|3.4.0|1.6+||提供通用的多数据源配置、解析、路由框架|\n|sqlhelper-mybatis-spring-common|3.4.0|1.6+||提供mybatis + spring 环境下，通用的代码|\n|sqlhelper-examples|1.0+               |1.8+ | |为这些工具提供 **测试用例** |\n\n\n## tools usage\n### 关键特性\n1. 支持 MyBatis, MyBatis-Plus, Tk.Mapper, SpringJdbc, Apache Commons-DBUtils, JFinal, EBean, Mango, Hibernate 等众多对数据库操作的框架 \n2. 支持 130+ 数据库（所有功能均支持，不限于分页功能）, 支持的数据库列表参考： ***[here](https://github.com/f1194361820/sqlhelper/wiki/Pagination_Database)***. 如果你想了解这些数据库的排名，可以参考这里：[DB Engines](https://db-engines.com/en/ranking/relational+dbms).下面是所有支持的国产数据库:\n  + AliSQL (阿里 MySQL)\n  + AntDB (亚信)\n  + CirroDB (东方国信 行云)\n  + CynosDB (腾讯云数据库)\n  + Doris (Apache Doris，百度研发)\n  + DM (达梦)\n  + EsgynDB (易鲸捷)\n  + GaussDB (华为 高斯)\n  + GBase (南大通用)\n  + GoldenDB (中兴)\n  + HHDB (恒辉数据库)\n  + HighGo (瀚高)\n  + HybridDB (阿里巴巴 分布式PostgreSQL)\n  + K-DB (浪潮)\n  + KingBase (金仓)\n  + MaxCompute (阿里巴巴)\n  + OBase (上海丛云信息科技)\n  + OceanBase (阿里巴巴/蚂蚁金服 兼容mysql)\n  + OSCAR (神州通用)\n  + OpenBase (东软)\n  + RadonDB (青云)\n  + SequoiaDB (巨杉)\n  + SinoDB (星瑞格)\n  + TDSQL (腾讯 分布式MySQL)\n  + TiDB (北京平凯星辰科技))\n  + Trafodion (易鲸捷 EsgynDB的开源版)\n  + UxDB (优炫数据库)\n3. 支持多个数据库在同一个应用中并存，且不需要做任何的区分，就能自动识别 \n4. 支持自动获取数据库 dialect （方言），也可以指定\n5. 性能要比**Mybatis-PageHelper**更高, 因为SQL中的 limit、offset 会以占位符 '?'的形式存在，支持缓存等，总之PageHelper支持的这里都支持，PageHelper不支持的这里也支持。\n6. 对于 select count语句，会自动的排除掉 order by 子句，以提升查询效率 \n7. 可以基于 Java SPI 规范来自定义Dialect，以此来扩展数据库\n8. 分页功能支持**子查询**：mybatis, mybatis-plus, spring-jdbc, apache commons-dbutils\n9. 支持 spring boot 1.x , 2.x\n10. 支持 JDK6+\n11. 支持 **Memory Pagination**\n12. 支持 SqlSymbolMapper, 可以使用它来自动映射数据库字段、表名等\n13. 支持 **Dump DDL**\n14. 支持 **like parameter escape [%]** : mybatis, mybatis-plus, tk.mapper 下使用\n15. 动态数据源 Dynamic DataSource，目前支持在 mybatis, mybatis-plus, tk.mapper 下使用 \n\n#### sqlhelper vs mybatis-pagehelper\n|  metric                  | mybatis-pagehelper |      sqlhelper    |\n|--------------------------|:------------------:|:-----------------:|\n|  databases               |         13         |         100+      |\n|  multiple databases in runtime |   √          |         √         |\n|  auto detect dialect     |         √          |         √         |\n|  plugin                  |         √          |         √         |\n|  PrepareStatement with '?'|         X         |         √         |                             \n|  mybatis                 |         3.x        |         3.x       |\n|  spring boot             |         1.x, 2.x   |         1.x, 2.x  |\n|  JDK                     |         1.6+       |         1.6+      |\n|  jFinal                  |         X          |         √         |\n|  Mango                   |         X          |         √         |\n|  EBean                   |         X          |         √         | \n|  国产数据库               |         X          | √ （参见上述列表）  |\n|  Spring JDBC             |         X          | √ 2.x,3.x,4.x,5.x   | \n|  SqlSymbol Mapping       |         X          |         √         |\n|  MyBatis-Plus            |         X          |         √         |\n|  tk.mapper               |         √          |         √         |   \n|  Apache Commons-DBUtils  |         X          |         √         |\n|  Subquery pagination     |         X          |         √         |  \n|  solon                   |         X          |         √         |\n|  多数据源                 |         X          |         √         |\n                     \n\n\n# 分页工具使用说明\n* [Quick Start](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart)\n  + [MyBatis application](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart_MyBatis)\n    - [Installation](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart_MyBatis)\n    - [How To](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart_MyBatis)\n    - [Migrate from mybatis-pagehelper application](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart_MyBatis)\n  + [SpringJDBC application](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart_SpringJDBC)\n    - [Installation](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart_SpringJDBC)\n    - [How To](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart_SpringJDBC)  \n  + [jFinal application](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart_jFinal)\n    - [Installation](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart_jFinal)\n    - [How To](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart_jFinal)\n  + [MyBatis-Plus application](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart_MyBatis_Plus)\n  + [EBean application](https://github.com/fangjinuo/sqlhelper/wiki/Pagination_QuickStart_ebean)\n* Advanced Usage\n\n更多说明，参见教程：\n```html\n1. https://fangjinuo.gitee.io/docs/index.html\n2. https://fangjinuo.github.io\n```\n\n\n\n# Dynamic DataSource\n目前针对动态（多）数据源这块，提供了方便的，易扩展的框架，可以基于此多数据源框架与各种ORM框架结合。\n此外目前内置对 MyBatis 系框架（ mybatis, mybatis-plus(2.x, 3.x), tk.mapper 等）做了内置的支持。提供了便利的 spring boot starter。\n\n## usage\n```yaml\nsqlhelper:\n  dynamic-datasource:\n    enabled: true\n    datasources:\n      - group: A\n        name: master\n        url: jdbc:h2:file:${user.dir}/sqlhelper-examples/sqlhelper-examples-db/src/main/resources/test\n        driver-class-name: org.h2.Driver\n        username: sa\n        password: 123456\n      - group: A\n        name: slave-1\n        url: jdbc:h2:file:${user.dir}/sqlhelper-examples/sqlhelper-examples-db/src/main/resources/test\n        driver-class-name: org.h2.Driver\n        username: sa\n        password: 123456\n      - group: A\n        name: slave-2\n        url: jdbc:h2:file:${user.dir}/sqlhelper-examples/sqlhelper-examples-db/src/main/resources/test\n        driver-class-name: org.h2.Driver\n        username: sa\n        password: 123456\n      - group: B\n        name: mysql\n        url: jdbc:h2:file:${user.dir}/sqlhelper-examples/sqlhelper-examples-db/src/main/resources/test\n        driver-class-name: org.h2.Driver\n        username: sa\n        password: 123456\n      - group: C\n        name: oracle\n        url: jdbc:h2:file:${user.dir}/sqlhelper-examples/sqlhelper-examples-db/src/main/resources/test\n        driver-class-name: org.h2.Driver\n        username: sa\n        password: 123456\n      - group: C\n        name: xxxx\n        url: jdbc:h2:file:${user.dir}/sqlhelper-examples/sqlhelper-examples-db/src/main/resources/test\n        driver-class-name: org.h2.Driver\n        username: sa\n        password: 123456\n```\n\n## 事务控制：\n\n```\n目前做法：\n    针对每一个数据源，都添加一个 TransactionManager。各自控制自己的。\n```\n\n## Dynamic DataSource - 开发计划\n+ [ ] 通用框架\n    + [X] 连接池实现\n        + [X] 支持常见连接池：HikariCP, Alibaba Druid, tomcat-jdbc, dbcp2, c3p0 \n        + [X] 支持在配置中使用哪个连接池实现\n        + [X] 支持所用连接池实现的特有配置项\n    + [X] DataSource 配置   \n        + [X] 支持分组配置，通常一个业务群一个分组，或者一个数据库集群用一个分组\n        + [X] 兼容 SpringBoot 默认 DataSource 配置\n        + [X] 支持多种异构数据源\n    + [X] DataSource 识别\n        + [X] 提供 @DataSource 注解，可以在 method, class 级别使用\n        + [X] 支持 自定义注解。\n        + [X] 支持多层级 注解配置。筛选时，安装最近优先原则\n        + [X] 支持自定义识别算法。例如可以基于此自行实现负载均衡，读写分离，随机等众多识别算法。\n        + [X] 支持多层嵌套。\n        + [X] 可自定义AOP拦截位置。\n    + [ ] Router\n        + [X] master, slave 识别\n          + [X] 基于 readonly 确定是否必定为slave\n          + [X] 基于 primary 判断\n          + [X] 如果没有primary属性则 基于 name 判断 \n        + [X] master 路由算法\n          + [X] first，即只取第一个\n        + [X] slave 路由算法\n          + [X] 随机路由\n          + [X] 读写分离路由\n          + [X] 负载均衡路由\n        + [ ] 故障转移\n+ [ ] 框架支持\n    + [X] mybatis \u0026 spring boot 应用\n    + [X] mybatis 2.x, 3x \u0026 spring boot 应用\n    + [X] tk.mapper \u0026 spring boot 应用\n    + [ ] spring jdbc\n    + [ ] apache DBUtils\n    + [ ] jfinal  \n\n\n# UrlParser\nParse jdbc url.\n## usage:\n\u003cpre\u003e\nString url = \"jdbc:mysql://${localhost}:${port}....\";\nDatabaseInfo dbinfo = new JdbcUrlParser().parse(url)\n...\n\u003c/pre\u003e \n\n# Batch Insert Tool\n 如果你想要进行业务SQL性能优化，又苦于数据库里没有太多数据，可以使用它来进行批量插入数据，大大的节省你造数据的时间。具体参加sqlhelper-batchinsert模块。\n\n# [FAQ](https://github.com/fangjinuo/sqlhelper/wiki/FAQ)\n这里提供了一些常见问题，对于刚使用SQLHelper时，可能对你很有帮助\n\n# Contact\nQQ 交流群: 750929088   \n![QQ Group](https://github.com/fangjinuo/sqlhelper/blob/master/_images/qq_group.png)\n\n\n##  [推广](https://github.com/fangjinuo)\n+ langx 系列\n    - [langx-js](https://github.com/fangjinuo/langx-js)：TypeScript, JavaScript tools\n    - [langx-java](https://github.com/fangjinuo/langx-java): Java tools ，可以替换guava, apache commons-lang,io, hu-tool等\n+ [easyjson](https://github.com/fangjinuo/easyjson): 一个通用的JSON库门面，可以无缝的在各个JSON库之间切换，就像slf4j那样。\n+ [sqlhelper](https://github.com/fangjinuo/sqlhelper): SQL工具套件（通用分页、DDL Dump、SQLParser、URL Parser、批量操作工具等）。\n+ [esmvc](https://github.com/fangjinuo/es-mvc): ElasticSearch 通用客户端，就像MyBatis Mapper那样顺滑\n+ [agileway](https://github.com/fangjinuo/agileway): 提供大量的框架扩展，方便日常开发\n+ [audit](https://github.com/fangjinuo/audit)：通用的Java应用审计框架\n\n## 鸣谢\n最后，感谢 Jetbrains 提供免费License，方便了开源项目的发展。\n\n[![Jetbrains](https://github.com/fangjinuo/sqlhelper/blob/master/_images/jetbrains.png)](https://www.jetbrains.com/zh-cn/)\n","funding_links":[],"categories":["Java"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbes2008%2Fsqlhelper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbes2008%2Fsqlhelper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbes2008%2Fsqlhelper/lists"}