import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {

    public static void main(String[] args) {
        String query1 = Query.builder()
                .from("Users")
                .where(Query.Condition.of("role > 'admin'").and("active = true"))
                .build();

        String query2 = Query.builder()
                .from("Products")
                .where(Query.Condition.of("price < 100")
                        .and(Query.Condition.of("stock > 10").and("available = true"))
                )
                .build();

        System.out.println(query1);
        System.out.println(query2);
    }
}

class Query {
    private String select;
    private String from;
    private String where;

    private Query() {
    }

    public static Query builder() {
        return new Query();
    }

    public Query select(String... columns) {
        if (columns == null) return this;

        this.select = String.join(",", columns);
        return this;
    }

    public Query from(String from) {
        this.from = from;
        return this;
    }

    public Query where(Condition condition) {
        this.where = condition.toString();
        return this;
    }

    public String build() {
        if (select == null || select.isEmpty()) this.select = "*";

        if (from == null || from.isEmpty()) throw new IllegalStateException("From clause is required");

        StringBuilder query = new StringBuilder()
                .append("SELECT ").append(select)
                .append(" FROM ").append(from);

        if (where != null) {
            query.append(" WHERE ").append(where);
        }
        return query.toString();
    }

    public static class Condition {
        private final StringBuilder conditionBuilder = new StringBuilder();

        private Condition(String condition) {
            this.conditionBuilder.append(condition);
        }

        public static Condition of(String condition) {
            return new Condition(condition);
        }

        public Condition and(String condition) {
            this.conditionBuilder.append(" AND ").append(condition);
            return this;
        }

        public Condition or(String condition) {
            this.conditionBuilder.append(" OR ").append(condition);
            return this;
        }

        public Condition and(Condition condition) {
            this.conditionBuilder.append(" AND (").append(condition.toString()).append(")");
            return this;
        }

        public Condition or(Condition condition) {
            this.conditionBuilder.append(" OR (").append(condition.toString()).append(")");
            return this;
        }

        @Override
        public String toString() {
            return conditionBuilder.toString();
        }
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: