|
@@ -0,0 +1,120 @@
|
|
|
+package org.example.join.sql;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.collection.ListUtil;
|
|
|
+import cn.hutool.core.convert.Convert;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.extra.spring.SpringUtil;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import lombok.AccessLevel;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import org.example.join.JoinMapper;
|
|
|
+import org.example.join.domain.QueryColumn;
|
|
|
+import org.example.join.domain.QueryCondition;
|
|
|
+import org.example.join.domain.QueryConditionOrder;
|
|
|
+import org.example.join.util.SqlConstant;
|
|
|
+
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+
|
|
|
+@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
|
|
|
+public class SqlWrapper<R> {
|
|
|
+
|
|
|
+ private static final JoinMapper mapper = SpringUtil.getBean(JoinMapper.class);
|
|
|
+
|
|
|
+ private final Sql<R> sql;
|
|
|
+
|
|
|
+ public SqlWrapper<R> where(QueryCondition... queryCondition) {
|
|
|
+ if (ObjectUtil.isNotEmpty(queryCondition)) {
|
|
|
+ sql.queryConditionList.addAll(ListUtil.toList(queryCondition));
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper<R> groupBy(QueryColumn... queryColumns) {
|
|
|
+ if (ObjectUtil.isNotEmpty(queryColumns)) {
|
|
|
+ sql.groupByList.addAll(ListUtil.toList(queryColumns));
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper<R> orderBy(QueryConditionOrder... queryConditionOrders) {
|
|
|
+ if (ObjectUtil.isNotEmpty(queryConditionOrders)) {
|
|
|
+ sql.orderByList.addAll(ListUtil.toList(queryConditionOrders));
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper<R> 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) {
|
|
|
+ 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) {
|
|
|
+ sql.limit = SqlConstant.LIMIT + offset.longValue();
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public SqlWrapper<R> limit(Number offset, Number rows) {
|
|
|
+ sql.limit = SqlConstant.LIMIT + offset.longValue() + StringPool.COMMA + rows.longValue();
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<R> list() {
|
|
|
+ List<?> result;
|
|
|
+ if (CharSequence.class.isAssignableFrom(sql.resultCls)
|
|
|
+ || Number.class.isAssignableFrom(sql.resultCls)
|
|
|
+ || Date.class.isAssignableFrom(sql.resultCls)) {
|
|
|
+ result = mapper.listObj(sql);
|
|
|
+ } else {
|
|
|
+ result = mapper.listMap(sql);
|
|
|
+ }
|
|
|
+
|
|
|
+ return BeanUtil.copyToList(result, sql.resultCls);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Page<R> page(Page<?> page) {
|
|
|
+ Page<?> result;
|
|
|
+ if (CharSequence.class.isAssignableFrom(sql.resultCls)
|
|
|
+ || Number.class.isAssignableFrom(sql.resultCls)
|
|
|
+ || Date.class.isAssignableFrom(sql.resultCls)) {
|
|
|
+ result = mapper.pageObj(sql, page);
|
|
|
+ } else {
|
|
|
+ result = mapper.pageMap(sql, page);
|
|
|
+ }
|
|
|
+
|
|
|
+ Page<R> rPage = new Page<>();
|
|
|
+ rPage.setPages(result.getPages());
|
|
|
+ rPage.setCurrent(result.getCurrent());
|
|
|
+ rPage.setSize(result.getSize());
|
|
|
+ rPage.setTotal(result.getTotal());
|
|
|
+ rPage.setRecords(BeanUtil.copyToList(result.getRecords(), sql.resultCls));
|
|
|
+ return rPage;
|
|
|
+ }
|
|
|
+
|
|
|
+ public R one() {
|
|
|
+ Object result;
|
|
|
+ if (CharSequence.class.isAssignableFrom(sql.resultCls)
|
|
|
+ || Number.class.isAssignableFrom(sql.resultCls)
|
|
|
+ || Date.class.isAssignableFrom(sql.resultCls)) {
|
|
|
+ result = mapper.oneObj(sql);
|
|
|
+ } else {
|
|
|
+ result = mapper.oneMap(sql);
|
|
|
+ }
|
|
|
+
|
|
|
+ return Convert.convert(sql.resultCls, result);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|