https://github.com/augustoccesar/querybuilder
Simple helper for building queries using Java/Kotlin code.
https://github.com/augustoccesar/querybuilder
java sql
Last synced: 6 months ago
JSON representation
Simple helper for building queries using Java/Kotlin code.
- Host: GitHub
- URL: https://github.com/augustoccesar/querybuilder
- Owner: augustoccesar
- Created: 2016-04-29T19:18:21.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2023-10-23T20:04:45.000Z (over 2 years ago)
- Last Synced: 2023-10-24T19:25:31.486Z (over 2 years ago)
- Topics: java, sql
- Language: Java
- Homepage:
- Size: 306 KB
- Stars: 8
- Watchers: 3
- Forks: 3
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# QueryBuilder
[](https://github.com/augustoccesar/QueryBuilder/actions/workflows/gradle-build-and-test.yml)
[](https://github.com/augustoccesar/QueryBuilder/packages/1972514)
Guide
-----
It all starts with the `SelectBuilder`. When a `SelectBuilder` is created you can start nesting methods to
build the queries.
#### Fields ####
##### `.select()` #####
Select the fields that are going to be queried.
```java
.select("{u}name") // Generates 'SELECT u.name AS u_name'
.select("{u}name{custom_alias}") // Generates 'SELECT u.name AS custom_alias'
.select("{_}name") // Generates 'SELECT name'
.select("{u}name{_}") // Generates 'SELECT u.name'
.select("{u}*name") // Generates 'SELECT DISTINCT u.name AS u_name'
```
#### Tables ####
##### `.from()` #####
```java
.from("users{u}") // Generates 'FROM users u'
.from("users{_}") // Generates 'FROM users'
.from("users u") // Generates 'FROM users u'
.from("users") // Generates 'FROM users'
```
#### Conditions ####
##### `.where()` #####
```java
.where("{u}name", Comparison.EQUALS, "Augusto") // Generates 'WHERE u.name = 'Augusto''
.where(Condition.eq("{u}name", "Augusto")) // Generates 'WHERE u.name = 'Augusto''
.where(
Condition.or(
Condition.eq("{u}name", "Augusto"),
Condition.eq("{u}las_name", "Silva")
)
) // Generates 'WHERE u.name = 'Augusto' OR u.last_name = 'Silva''
```
All possible `Condition` builders are defined in [Condition](#condition) description.
#### Joins ####
Possible [Join](#join) builders are listed in his description.
##### `.join()` #####
```java
.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'
```
##### `.joins()` #####
```java
.joins(
new Join(Join.INNER).table("users_profile{up}").on("{u}id", "{up}user_id"),
new Join(Join.INNER, "users_data{ud}", "{u}id", "{ud}user_id")
) // Generates 'INNER JOIN users_profile up ON u.id = up.user_id INNER JOIN users_data ud ON u.id = ud.user_id'
```
##### `.innerJoin()` #####
```java
.innerJoin("users_profile{up}", "{u}id", "{up}user_id") // Generates 'INNER JOIN users_profile up ON u.id = up.user_id'
```
##### `.leftJoin()` #####
```java
.leftJoin("users_profile{up}", "{u}id", "{up}user_id") // Generates 'LEFT JOIN users_profile up ON u.id = up.user_id'
```
##### `.rigthJoin()` #####
```java
.rigthJoin("users_profile{up}", "{u}id", "{up}user_id") // Generates 'RIGHT JOIN users_profile up ON u.id = up.user_id'
```
#### Order ####
##### `.order()` #####
```java
.order(Order.by("{u}id", Order.DESC)) // Generates 'ORDER BY u.id DESC'
.order(Order.asc("{u}id")) // Generates 'ORDER BY u.id ASC'
.order(Order.desc("{u}id")) // Generates 'ORDER BY u.id DESC'
```
#### Limit ####
```java
.limit(10) // Generates 'LIMIT 10'
```
#### Union ####
##### `.union()` #####
```java
.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)'
```
##### `.unionAll()` #####
```java
.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)'
```
#### Aggregation ####
All possible [Aggregation]() are listed in his description
```java
.select(Aggregation.count("{u}id")) // Generates 'COUNT (u.id) AS count_u_id'
.select(Aggregation.count("{u}id", "custom_alias")) // Generates 'COUNT (u.id) AS custom_alias'
```
And the `Group By` clause constructed by
```java
.groupBy("{u}name") // Generates 'GROUP BY u.name'
```
Constructors
------------
#### `Condition` ####
Build conditions to be used in the [.where()](). Possible options:
```java
Condition.eq("{u}name", "Augusto") // Generates 'u.name = 'Augusto''
Condition.neq("{u}name", "John") // Generates 'u.name <> 'John''
Condition.in("{u}job", Arrays.asList("Developer", "Designer")) // Generates 'u.job IN ('Developer', 'Designer')'
Condition.isNull("{u}deleted_at") // Generates 'u.deleted_at IS NULL'
Condition.isNotNull("{u}last_login") // Generates 'u.last_login IS NOT NULL'
Condition.like("{u}name", "usto") // Generates 'u.name LIKE '%usto%''
Condition.nlike("{u}name", "esar") // Generates 'u.name NOT LIKE '%esar%''
Condition.gt("{u}salary", 4000) // Generates 'u.salary > 4000'
Condition.gte("{u}age", 21) // Generates 'u.age >= 21'
Condition.lt("{u}login_attempts", 5) // Generates 'u.login_attempts < 5'
Condition.lte("{u}products", 5) // Generates 'u.products <= 5'
Condition.and(
Condition.eq("{u}name", "Augusto"),
Condition.eq("{u}age", 23)
) // Generates 'u.name = 'Augusto' AND u.age = 23'
Condition.or(
Condition.eq("{u}name", "Augusto"),
Condition.eq("{u}last_name", "Silva")
) // Generates 'u.name = 'Augusto' OR u.last_name = 'Silva''
Condition.and(
Condition.eq("{_}name", "Augusto"),
Condition.gte("{_}age", 21),
Condition.or(
Condition.eq("{_}nationality", "Brazilian"),
Condition.eq("{_}nationality", "Japanese"),
Condition.and(
Condition.eq("{_}job", "Diplomat"),
Condition.eq("{_}job_active", true)
)
)
) // Generates 'name = 'Augusto' AND age >= 21 AND ( nationality = 'Brazilian' OR nationality = 'Japanese' OR ( job = 'Diplomat' AND job_active = true ) )'
```
#### `Join` ####
```java
new 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'
new 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'
new Join(Join.INNER, "user_profile{up}", "{u}id", "{up}user_id") // Generates 'INNER JOIN user_profile up ON u.id = up.user_id'
new Join(Join.INNER, "user_profile{up}", "{u}id = {up}user_id" ) // Generates 'INNER JOIN user_profile up ON u.id = up.user_id'
```
#### `Comparison` ####
Comparisons used if building inline [.where()] conditions.
```java
Comparison.EQUALS
Comparison.IN
Comparison.IS_NULL
Comparison.IS_NOT_NULL
Comparison.LIKE
Comparison.NOT_LIKE
Comparison.DIFFERENT
Comparison.GREATER_THAN
Comparison.GREATER_THAN_OR_EQUALS
Comparison.LESS_THAN
Comparison.LESS_THAN_OR_EQUALS
```
#### `Aggregation` ####
Aggregations used for creating [.select()] clause aggregations.
```java
Aggregation.AVERAGE
Aggregation.COUNT
Aggregation.MAX
Aggregation.MIN
Aggregation.SUM
Aggregation.average("{u}score") // Generates 'AVG (u.score) AS avg_u_score'
Aggregation.count("{u}id") // Generates 'COUNT (u.id) AS cout_u_id'
Aggregation.max("{u}score") // Generates 'MAX (u.score) AS max_u_score'
Aggregation.min("{u}score") // Generates 'MIN (u.score) AS min_u_score'
Aggregation.sum("{u}score") // Generates 'SUM (u.score) AS sum_u_score'
```
All `Aggregation` builders can have and extra parameter that is used to sed a custom alias
to the aggregation