
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