{"id":19793384,"url":"https://github.com/solarisneko/sql-light-rail","last_synced_at":"2025-07-29T10:38:59.867Z","repository":{"id":41832901,"uuid":"461473769","full_name":"SolarisNeko/sql-light-rail","owner":"SolarisNeko","description":"sql-light-rail 是一款【 flux-builder 语法 + ORM + 分库分表】的 DAO 框架。","archived":false,"fork":false,"pushed_at":"2024-03-05T04:16:22.000Z","size":448,"stargazers_count":7,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-22T17:51:16.020Z","etag":null,"topics":["dao","easy","java","orm"],"latest_commit_sha":null,"homepage":"","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/SolarisNeko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"Roadmap.md","authors":null,"dei":null}},"created_at":"2022-02-20T11:59:44.000Z","updated_at":"2023-07-07T17:32:10.000Z","dependencies_parsed_at":"2024-03-05T05:27:33.834Z","dependency_job_id":"23b2a296-3643-41ea-951b-60db7794bed1","html_url":"https://github.com/SolarisNeko/sql-light-rail","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/SolarisNeko/sql-light-rail","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolarisNeko%2Fsql-light-rail","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolarisNeko%2Fsql-light-rail/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolarisNeko%2Fsql-light-rail/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolarisNeko%2Fsql-light-rail/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SolarisNeko","download_url":"https://codeload.github.com/SolarisNeko/sql-light-rail/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolarisNeko%2Fsql-light-rail/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267672225,"owners_count":24125525,"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","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["dao","easy","java","orm"],"created_at":"2024-11-12T07:09:40.643Z","updated_at":"2025-07-29T10:38:59.829Z","avatar_url":"https://github.com/SolarisNeko.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SQL Light Rail\n\n## 简介\n\n\n\n### 介绍\n\nSQL Light Rail (SQL 轻轨)\n\n1. class SqlLightRail = SQL 链式编写\n2. class ShardingKey = ShardingId 计算\n3. class RepositoryManager = 多数据源管理\n\nLicense 为 Apache-2.0\n\n## Download\n\n### Maven\n\n```xml\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.neko233\u003c/groupId\u003e\n    \u003cartifactId\u003esql-light-rail\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.0\u003c/version\u003e\n\u003c/dependency\u003e\n\n```\n\n### Gradle\n\n```groovy\nimplementation group: 'com.neko233', name: 'sql-light-rail', version: '1.1.0'\n```\n\n## 初衷 / 痛点\n\n因 mybatis-plus/flux 等好用的 ORM 框架, 都依赖于 mybatis. \n\n但一旦离开了 mybatis 生态圈, 很多好用的机制不能拿出来独立使用. \n\n所以, 该项目做了以下的模块化:\n1. 独立的 SQL stream 写法, 直接生成 sql 语句. 无需 mybatis-plus 重量级依赖.\n2. 独立的 ORM 机制.\n3. 独立的 Sharding DB 机制\n4. Plugin Chain (插件化) 处理 SQL 执行过程.\n\n\n# Use\nDependency\n## maven\n```xml\n\u003c!-- default use druid as DataSource --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.neko233\u003c/groupId\u003e\n    \u003cartifactId\u003esql-light-rail\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003emysql\u003c/groupId\u003e\n    \u003cartifactId\u003emysql-connector-java\u003c/artifactId\u003e\n    \u003cversion\u003e8.0.25\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## gradle\n```kotlin\nimplementation(\"com.neko233:sql-light-rail:1.1.0\")\nimplementation(\"mysql:mysql-connector-java:8.0.25\")\n\n```\n\n# Code\n## Sql Builder 链式构建 SQL \n```java\n\npublic class SelectTest {\n\n    /**\n     * 模拟复杂业务场景，动态维度 SQL\n     */\n    @Test\n    public void businessSelectDynamicDimension() {\n        boolean isGroupByPackageId = true;\n\n        // 1 Base SQL\n        SelectCondition selectCondition = SelectCondition.builder()\n                .column(\"app_id\")\n                .column(\"channel_id\")\n                .column(\"sum(pay_money)\", \"sum_money\")\n                .column(\"register_time\")\n                .column(\"pay_time\");\n        WhereCondition whereCondition = WhereCondition.builder()\n                .equalsTo(\"app_id\", PLACEHOLDER)\n                .equalsTo(\"channel_id\", \"-1\")\n                .equalsTo(\"package_id\", \"-1\")\n                .lessThanOrEquals(\"register_time\", PLACEHOLDER)\n                .lessThanOrEquals(\"register_time\", PLACEHOLDER);\n        GroupByCondition groupByCondition = GroupByCondition.builder()\n                .groupBy(\"register_time\", \"pay_time\", \"channel_id\");\n\n        // 2 [Business Rule] dynamic sql add by batch\n        if (isGroupByPackageId) {\n            selectCondition.column(\"package_id\");\n            groupByCondition.groupBy(\"package_id\");\n        }\n\n        // 3 build SQL\n        String select = Sql233.selectTable(\"traffic_statistics_report\")\n                .select(selectCondition.build())\n                .where(whereCondition.build())\n                .groupBy(groupByCondition)\n                .build();\n        // 4 execute\n        System.out.println(select);\n        String target = \"SELECT app_id, channel_id, sum(pay_money) as 'sum_money', register_time, pay_time, package_id FROM traffic_statistics_report  WHERE app_id = ? and channel_id = '-1' and package_id = '-1' and register_time \u003c= ? and register_time \u003c= ? GROUP BY register_time, pay_time, channel_id, package_id\";\n        Assert.assertEquals(target, select);\n    }\n\n    // ...\n}\n```\n\n\n## ORM\n### Select\n定义对象\n```java\n/**\n * @author SolarisNeko\n * Date on 2022-02-20\n */\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\n@Builder\npublic class User {\n\n    @Column(\"id\")\n    private int id;\n\n    @Column(\"name\")\n    private String name;\n\n}\n```\n\n查询部分\n```java\n\npublic class SelectDbTest {\n\n    Db db = new Db(MyDataSource.getDefaultDataSource());\n\n    public SelectDbTest() throws Exception {\n    }\n\n\n    @Test\n    public void selectTest_IntegerOrm() throws Exception {\n\n        List\u003cInteger\u003e testIntValue = db\n                .executeQuery(\"Select 1 From dual \", Integer.class);\n\n        Assert.assertEquals(1, testIntValue.get(0).intValue());\n    }\n\n    @Test\n    public void selectTest_ObjectOrm() throws Exception {\n\n        List\u003cUser\u003e users = db.executeQuery(\"Select id, name From user Limit 0, 1 \", User.class);\n\n        Assert.assertTrue(users.size() \u003e 0);\n    }\n\n    @Test\n    public void selectTest_paramsSet() throws Exception {\n        Object[] params = {1};\n        List\u003cUser\u003e users = db\n                .executeQuery(\"Select id, name From user Where id != ? Limit 0, 1 \", params, User.class);\n\n        Assert.assertTrue(users.size() \u003e 0);\n    }\n\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolarisneko%2Fsql-light-rail","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolarisneko%2Fsql-light-rail","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolarisneko%2Fsql-light-rail/lists"}