{"id":31824637,"url":"https://github.com/augustoccesar/querybuilder","last_synced_at":"2025-10-11T15:46:31.317Z","repository":{"id":118003225,"uuid":"57407559","full_name":"augustoccesar/QueryBuilder","owner":"augustoccesar","description":"Simple helper for building queries using Java/Kotlin code.","archived":false,"fork":false,"pushed_at":"2023-10-23T20:04:45.000Z","size":313,"stargazers_count":8,"open_issues_count":4,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-10-24T19:25:31.486Z","etag":null,"topics":["java","sql"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/augustoccesar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2016-04-29T19:18:21.000Z","updated_at":"2023-10-23T19:58:29.000Z","dependencies_parsed_at":null,"dependency_job_id":"215eed31-1b84-41e8-abb1-4bbee261a6f6","html_url":"https://github.com/augustoccesar/QueryBuilder","commit_stats":null,"previous_names":[],"tags_count":11,"template":null,"template_full_name":null,"purl":"pkg:github/augustoccesar/QueryBuilder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augustoccesar%2FQueryBuilder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augustoccesar%2FQueryBuilder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augustoccesar%2FQueryBuilder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augustoccesar%2FQueryBuilder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/augustoccesar","download_url":"https://codeload.github.com/augustoccesar/QueryBuilder/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augustoccesar%2FQueryBuilder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279007616,"owners_count":26084336,"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-10-11T02:00:06.511Z","response_time":55,"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":["java","sql"],"created_at":"2025-10-11T15:46:27.962Z","updated_at":"2025-10-11T15:46:31.309Z","avatar_url":"https://github.com/augustoccesar.png","language":"Java","readme":"# QueryBuilder\n\n[![Gradle Build and Test](https://github.com/augustoccesar/QueryBuilder/actions/workflows/gradle-build-and-test.yml/badge.svg?branch=master)](https://github.com/augustoccesar/QueryBuilder/actions/workflows/gradle-build-and-test.yml)\n[![GitHub release (with filter)](https://img.shields.io/github/v/release/augustoccesar/QueryBuilder)](https://github.com/augustoccesar/QueryBuilder/packages/1972514)\n\n\nGuide\n-----\n\nIt all starts with the `SelectBuilder`. When a `SelectBuilder` is created you can start nesting methods to\nbuild the queries.\n\n#### Fields ####\n\n##### `.select()` #####\nSelect the fields that are going to be queried.\n```java\n.select(\"{u}name\")                  // Generates 'SELECT u.name AS u_name'\n.select(\"{u}name{custom_alias}\")    // Generates 'SELECT u.name AS custom_alias'\n.select(\"{_}name\")                  // Generates 'SELECT name'\n.select(\"{u}name{_}\")               // Generates 'SELECT u.name'\n.select(\"{u}*name\")                 // Generates 'SELECT DISTINCT u.name AS u_name'\n```\n\n#### Tables ####\n\n##### `.from()` #####\n```java\n.from(\"users{u}\")   // Generates 'FROM users u'\n.from(\"users{_}\")   // Generates 'FROM users'\n.from(\"users u\")    // Generates 'FROM users u'\n.from(\"users\")      // Generates 'FROM users'\n```\n\n#### Conditions ####\n\n##### `.where()` #####\n```java\n.where(\"{u}name\", Comparison.EQUALS, \"Augusto\") // Generates 'WHERE u.name = 'Augusto''\n.where(Condition.eq(\"{u}name\", \"Augusto\"))      // Generates 'WHERE u.name = 'Augusto''\n.where(\n        Condition.or(\n                Condition.eq(\"{u}name\", \"Augusto\"),\n                Condition.eq(\"{u}las_name\", \"Silva\")\n        )\n)                                               // Generates 'WHERE u.name = 'Augusto' OR u.last_name = 'Silva''\n```\nAll possible `Condition` builders are defined in [Condition](#condition) description.\n\n#### Joins ####\n\nPossible [Join](#join) builders are listed in his description.\n\n##### `.join()` #####\n```java\n.join(new Join(Join.INNER).table(\"users_profile{up}\").on(\"{u}id\", \"{up}user_id\")) // Generates 'INNER JOIN users_profile up ON u.id = up.user_id'\n```\n\n##### `.joins()` #####\n```java\n.joins(\n        new Join(Join.INNER).table(\"users_profile{up}\").on(\"{u}id\", \"{up}user_id\"),\n        new Join(Join.INNER, \"users_data{ud}\", \"{u}id\", \"{ud}user_id\")\n)   // Generates 'INNER JOIN users_profile up ON u.id = up.user_id INNER JOIN users_data ud ON u.id = ud.user_id'\n```\n\n##### `.innerJoin()` #####\n```java\n.innerJoin(\"users_profile{up}\", \"{u}id\", \"{up}user_id\") // Generates 'INNER JOIN users_profile up ON u.id = up.user_id'\n```\n\n##### `.leftJoin()` #####\n```java\n.leftJoin(\"users_profile{up}\", \"{u}id\", \"{up}user_id\") // Generates 'LEFT JOIN users_profile up ON u.id = up.user_id'\n```\n\n##### `.rigthJoin()` #####\n```java\n.rigthJoin(\"users_profile{up}\", \"{u}id\", \"{up}user_id\") // Generates 'RIGHT JOIN users_profile up ON u.id = up.user_id'\n```\n\n#### Order ####\n\n##### `.order()` #####\n```java\n.order(Order.by(\"{u}id\", Order.DESC))   // Generates 'ORDER BY u.id DESC'\n.order(Order.asc(\"{u}id\"))              // Generates 'ORDER BY u.id ASC'\n.order(Order.desc(\"{u}id\"))             // Generates 'ORDER BY u.id DESC'\n```\n\n#### Limit ####\n```java\n.limit(10) // Generates 'LIMIT 10'\n```\n\n#### Union ####\n\n##### `.union()` #####\n```java\n.union(new SelectBuilder().select(\"{u}id\", \"{u}name\").from(\"users{u}\")) // Generates 'UNION (SELECT u.id AS u_id, u.name AS u_name FROM users u)'\n```\n\n##### `.unionAll()` #####\n```java\n.unionAll(new SelectBuilder().select(\"{u}id\", \"{u}name\").from(\"users{u}\")) // Generates 'UNION ALL (SELECT u.id AS u_id, u.name AS u_name FROM users u)'\n```\n\n#### Aggregation ####\nAll possible [Aggregation]() are listed in his description\n```java\n.select(Aggregation.count(\"{u}id\")) // Generates 'COUNT (u.id) AS count_u_id'\n.select(Aggregation.count(\"{u}id\", \"custom_alias\")) // Generates 'COUNT (u.id) AS custom_alias'\n```\nAnd the `Group By` clause constructed by\n```java\n.groupBy(\"{u}name\") // Generates 'GROUP BY u.name'\n```\n\nConstructors\n------------\n\n#### `Condition` ####\nBuild conditions to be used in the [.where()](). Possible options:\n```java\nCondition.eq(\"{u}name\", \"Augusto\")                              // Generates 'u.name = 'Augusto''\nCondition.neq(\"{u}name\", \"John\")                                // Generates 'u.name \u003c\u003e 'John''\nCondition.in(\"{u}job\", Arrays.asList(\"Developer\", \"Designer\"))  // Generates 'u.job IN ('Developer', 'Designer')'\nCondition.isNull(\"{u}deleted_at\")                               // Generates 'u.deleted_at IS NULL'\nCondition.isNotNull(\"{u}last_login\")                            // Generates 'u.last_login IS NOT NULL'\nCondition.like(\"{u}name\", \"usto\")                               // Generates 'u.name LIKE '%usto%''\nCondition.nlike(\"{u}name\", \"esar\")                              // Generates 'u.name NOT LIKE '%esar%''\nCondition.gt(\"{u}salary\", 4000)                                 // Generates 'u.salary \u003e 4000'\nCondition.gte(\"{u}age\", 21)                                     // Generates 'u.age \u003e= 21'\nCondition.lt(\"{u}login_attempts\", 5)                            // Generates 'u.login_attempts \u003c 5'\nCondition.lte(\"{u}products\", 5)                                 // Generates 'u.products \u003c= 5'\nCondition.and(\n        Condition.eq(\"{u}name\", \"Augusto\"),\n        Condition.eq(\"{u}age\", 23)\n)                                                               // Generates 'u.name = 'Augusto' AND u.age = 23'\nCondition.or(\n        Condition.eq(\"{u}name\", \"Augusto\"),\n        Condition.eq(\"{u}last_name\", \"Silva\")\n)                                                               // Generates 'u.name = 'Augusto' OR u.last_name = 'Silva''\nCondition.and(\n        Condition.eq(\"{_}name\", \"Augusto\"),\n        Condition.gte(\"{_}age\", 21),\n        Condition.or(\n                Condition.eq(\"{_}nationality\", \"Brazilian\"),\n                Condition.eq(\"{_}nationality\", \"Japanese\"),\n                Condition.and(\n                        Condition.eq(\"{_}job\", \"Diplomat\"),\n                        Condition.eq(\"{_}job_active\", true)\n                )\n        )\n)                                                               // Generates 'name = 'Augusto' AND age \u003e= 21 AND ( nationality = 'Brazilian' OR nationality = 'Japanese' OR ( job = 'Diplomat' AND job_active = true ) )'\n```\n\n#### `Join` ####\n```java\nnew Join(Join.LEFT).table(\"user_profile{up}\").on(\"{u}id\", \"{up}user_id\")    // Generates 'LEFT JOIN user_profile up ON u.id = up.user_id'\nnew Join(Join.LEFT).table(\"user_profile{up}\").on(\"{u}id = {up}user_id\")     // Generates 'LEFT JOIN user_profile up ON u.id = up.user_id'\nnew Join(Join.INNER, \"user_profile{up}\", \"{u}id\", \"{up}user_id\")            // Generates 'INNER JOIN user_profile up ON u.id = up.user_id'\nnew Join(Join.INNER, \"user_profile{up}\", \"{u}id = {up}user_id\" )            // Generates 'INNER JOIN user_profile up ON u.id = up.user_id'\n```\n\n#### `Comparison` ####\nComparisons used if building inline [.where()] conditions.\n```java\nComparison.EQUALS\nComparison.IN\nComparison.IS_NULL\nComparison.IS_NOT_NULL\nComparison.LIKE\nComparison.NOT_LIKE\nComparison.DIFFERENT\nComparison.GREATER_THAN\nComparison.GREATER_THAN_OR_EQUALS\nComparison.LESS_THAN\nComparison.LESS_THAN_OR_EQUALS\n```\n\n#### `Aggregation` ####\nAggregations used for creating [.select()] clause aggregations.\n```java\nAggregation.AVERAGE\nAggregation.COUNT\nAggregation.MAX\nAggregation.MIN\nAggregation.SUM\n\nAggregation.average(\"{u}score\") // Generates 'AVG (u.score) AS avg_u_score'\nAggregation.count(\"{u}id\")      // Generates 'COUNT (u.id) AS cout_u_id'\nAggregation.max(\"{u}score\")     // Generates 'MAX (u.score) AS max_u_score'\nAggregation.min(\"{u}score\")     // Generates 'MIN (u.score) AS min_u_score'\nAggregation.sum(\"{u}score\")     // Generates 'SUM (u.score) AS sum_u_score'\n```\nAll `Aggregation` builders can have and extra parameter that is used to sed a custom alias\nto the aggregation\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faugustoccesar%2Fquerybuilder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faugustoccesar%2Fquerybuilder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faugustoccesar%2Fquerybuilder/lists"}