All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xin.xihc.jba.sql.Select Maven / Gradle / Ivy

package xin.xihc.jba.sql;

import xin.xihc.jba.scan.TableManager;
import xin.xihc.utils.common.CommonUtil;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

import static xin.xihc.jba.sql.SqlConstants.*;

/**
 * Select语句生成器
 *
 * @author Leo.Xi
 * @date 2020/1/14
 * @since 1.0
 **/
public class Select implements SqlType {

    /**
     * COLUMN 列
     */
    private final List columns = new LinkedList<>();
    /**
     * TABLE 表
     */
    private final List tables = new LinkedList<>();
    /**
     * 排序字段列表
     */
    private final List orderBys = new LinkedList<>();
    private KV kv = new KV();
    private Where where;

    private Select() {
    }

    public static Select from(Class clazz) {
        Select select = new Select();
        select.tables.add(TableManager.getTable(clazz).getTableName());
        return select;
    }

    public static Select from(String... tables) {
        Select select = new Select();
        select.tables.addAll(Arrays.asList(tables));
        return select;
    }

    public Select select(Class clazz) {
        columns.addAll(TableManager.getColumnNames(clazz, null, null));
        return this;
    }

    public Select select(String... columns) {
        this.columns.addAll(Arrays.asList(columns));
        return this;
    }

    public Select select(Select select, String alias) {
        if (CommonUtil.isNotNullEmpty(alias)) {
            this.columns.add("(" + select.toSql() + ")" + AS + alias + BLANK);
        } else {
            this.columns.add("(" + select.toSql() + ")");
        }
        return this;
    }

    public Select select() {
        if (this.columns.size() < 1) {
            this.columns.add("*");
        }
        return this;
    }

    public Select where(Where where) {
        this.where = where;
        if (where != null) {
            this.kv = where.getKv();
        }
        return this;
    }

    public Select orderBy(String... orders) {
        this.orderBys.addAll(Arrays.asList(orders));
        return this;
    }

    public KV getKv() {
        return this.kv;
    }

    /**
     * 转为SQL语句
     *
     * @return sql
     * @author Leo.Xi
     * @date 2020/1/14
     * @since 0.0.1
     */
    @Override
    public String toSql() {
        String sql = action() + String.join(",", this.columns) + FROM + String.join(",", this.tables);
        if (this.where != null) {
            sql += this.where.toSql();
        }
        if (this.orderBys.size() > 0) {
            sql += ORDER_BY + String.join(",", this.orderBys);
        }
        return sql;
    }

    /**
     * 操作类型
     *
     * @return SELECT、WHERE、UPDATE、ORDER BY、
     * @author Leo.Xi
     * @date 2020/1/18
     * @since 0.0.1
     */
    @Override
    public String action() {
        return SELECT;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy