|
@@ -10,9 +10,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import lombok.AccessLevel;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.example.join.JoinMapper;
|
|
|
+import org.example.join.model.AbstractQueryColumn;
|
|
|
import org.example.join.model.QueryColumn;
|
|
|
import org.example.join.model.QueryCondition;
|
|
|
import org.example.join.model.QueryConditionOrder;
|
|
|
+import org.example.join.model.TableSublist;
|
|
|
|
|
|
import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
@@ -20,96 +22,100 @@ import java.util.List;
|
|
|
import java.util.Objects;
|
|
|
|
|
|
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
|
|
|
-public class SqlWrapper<R> {
|
|
|
+public class SqlWrapper extends AbstractQueryColumn {
|
|
|
|
|
|
private static final JoinMapper mapper = SpringUtil.getBean(JoinMapper.class);
|
|
|
|
|
|
- private final Sql<R> sql;
|
|
|
+ private final Sql sql;
|
|
|
|
|
|
- public SqlWrapper<R> where(QueryCondition... queryCondition) {
|
|
|
+ public TableSublist asTable(String alias) {
|
|
|
+ return new TableSublist(sql, alias);
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper where(QueryCondition... queryCondition) {
|
|
|
if (ObjectUtil.isNotEmpty(queryCondition)) {
|
|
|
sql.queryConditionList.addAll(ListUtil.toList(queryCondition));
|
|
|
}
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public SqlWrapper<R> where(boolean condition, QueryCondition... queryCondition) {
|
|
|
+ public SqlWrapper where(boolean condition, QueryCondition... queryCondition) {
|
|
|
if (condition) {
|
|
|
where(queryCondition);
|
|
|
}
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public SqlWrapper<R> groupBy(QueryColumn... queryColumns) {
|
|
|
+ public SqlWrapper groupBy(QueryColumn... queryColumns) {
|
|
|
if (ObjectUtil.isNotEmpty(queryColumns)) {
|
|
|
sql.groupByList.addAll(ListUtil.toList(queryColumns));
|
|
|
}
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public SqlWrapper<R> orderBy(QueryConditionOrder... queryConditionOrders) {
|
|
|
+ public SqlWrapper orderBy(QueryConditionOrder... queryConditionOrders) {
|
|
|
if (ObjectUtil.isNotEmpty(queryConditionOrders)) {
|
|
|
sql.orderByList.addAll(ListUtil.toList(queryConditionOrders));
|
|
|
}
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public SqlWrapper<R> orderByAsc(QueryColumn... queryColumns) {
|
|
|
+ public SqlWrapper orderByAsc(QueryColumn... queryColumns) {
|
|
|
if (ObjectUtil.isNotEmpty(queryColumns)) {
|
|
|
sql.orderByList.addAll(Arrays.stream(queryColumns).filter(Objects::nonNull).map(QueryColumn::asc).toList());
|
|
|
}
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public SqlWrapper<R> orderByDesc(QueryColumn... queryColumns) {
|
|
|
+ public SqlWrapper orderByDesc(QueryColumn... queryColumns) {
|
|
|
if (ObjectUtil.isNotEmpty(queryColumns)) {
|
|
|
sql.orderByList.addAll(Arrays.stream(queryColumns).filter(Objects::nonNull).map(QueryColumn::desc).toList());
|
|
|
}
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public SqlWrapper<R> limit(Number offset) {
|
|
|
+ public SqlWrapper limit(Number offset) {
|
|
|
sql.limit = SqlConstant.LIMIT + offset.longValue();
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public SqlWrapper<R> limit(Number offset, Number rows) {
|
|
|
+ public SqlWrapper limit(Number offset, Number rows) {
|
|
|
sql.limit = SqlConstant.LIMIT + offset.longValue() + StringPool.COMMA + rows.longValue();
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public Select<R> union() {
|
|
|
- Sql<R> unionSql = new Sql<>(sql.resultCls);
|
|
|
+ public Select union() {
|
|
|
+ Sql unionSql = new Sql();
|
|
|
unionSql.unionType = SqlConstant.UNION;
|
|
|
unionSql.unionList.add(sql);
|
|
|
- return new Select<>(unionSql);
|
|
|
+ return new Select(unionSql);
|
|
|
}
|
|
|
|
|
|
- public Select<R> unionAll() {
|
|
|
- Sql<R> unionSql = new Sql<>(sql.resultCls);
|
|
|
+ public Select unionAll() {
|
|
|
+ Sql unionSql = new Sql();
|
|
|
unionSql.unionType = SqlConstant.UNION_ALL;
|
|
|
unionSql.unionList.add(sql);
|
|
|
- return new Select<>(unionSql);
|
|
|
+ return new Select(unionSql);
|
|
|
}
|
|
|
|
|
|
- public List<R> list() {
|
|
|
+ public <R> List<R> list(Class<R> cls) {
|
|
|
List<?> result;
|
|
|
- if (CharSequence.class.isAssignableFrom(sql.resultCls)
|
|
|
- || Number.class.isAssignableFrom(sql.resultCls)
|
|
|
- || Date.class.isAssignableFrom(sql.resultCls)) {
|
|
|
+ if (CharSequence.class.isAssignableFrom(cls)
|
|
|
+ || Number.class.isAssignableFrom(cls)
|
|
|
+ || Date.class.isAssignableFrom(cls)) {
|
|
|
result = mapper.listObj(sql);
|
|
|
} else {
|
|
|
result = mapper.listMap(sql);
|
|
|
}
|
|
|
|
|
|
- return BeanUtil.copyToList(result, sql.resultCls);
|
|
|
+ return BeanUtil.copyToList(result, cls);
|
|
|
}
|
|
|
|
|
|
- public Page<R> page(Page<?> page) {
|
|
|
+ public <R> Page<R> page(Class<R> cls, Page<?> page) {
|
|
|
Page<?> result;
|
|
|
- if (CharSequence.class.isAssignableFrom(sql.resultCls)
|
|
|
- || Number.class.isAssignableFrom(sql.resultCls)
|
|
|
- || Date.class.isAssignableFrom(sql.resultCls)) {
|
|
|
+ if (CharSequence.class.isAssignableFrom(cls)
|
|
|
+ || Number.class.isAssignableFrom(cls)
|
|
|
+ || Date.class.isAssignableFrom(cls)) {
|
|
|
result = mapper.pageObj(sql, page);
|
|
|
} else {
|
|
|
result = mapper.pageMap(sql, page);
|
|
@@ -120,21 +126,31 @@ public class SqlWrapper<R> {
|
|
|
rPage.setCurrent(result.getCurrent());
|
|
|
rPage.setSize(result.getSize());
|
|
|
rPage.setTotal(result.getTotal());
|
|
|
- rPage.setRecords(BeanUtil.copyToList(result.getRecords(), sql.resultCls));
|
|
|
+ rPage.setRecords(BeanUtil.copyToList(result.getRecords(), cls));
|
|
|
return rPage;
|
|
|
}
|
|
|
|
|
|
- public R one() {
|
|
|
+ public <R> R one(Class<R> cls) {
|
|
|
Object result;
|
|
|
- if (CharSequence.class.isAssignableFrom(sql.resultCls)
|
|
|
- || Number.class.isAssignableFrom(sql.resultCls)
|
|
|
- || Date.class.isAssignableFrom(sql.resultCls)) {
|
|
|
+ if (CharSequence.class.isAssignableFrom(cls)
|
|
|
+ || Number.class.isAssignableFrom(cls)
|
|
|
+ || Date.class.isAssignableFrom(cls)) {
|
|
|
result = mapper.oneObj(sql);
|
|
|
} else {
|
|
|
result = mapper.oneMap(sql);
|
|
|
}
|
|
|
|
|
|
- return Convert.convert(sql.resultCls, result);
|
|
|
+ return Convert.convert(cls, result);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected AbstractQueryColumn copy() {
|
|
|
+ return new SqlWrapper(sql);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String toSql() {
|
|
|
+ return StringPool.LEFT_BRACKET + sql.toSql() + StringPool.RIGHT_BRACKET;
|
|
|
}
|
|
|
|
|
|
}
|