|
@@ -0,0 +1,332 @@
|
|
|
+package com.sd.business.util.sql;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.SharedString;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+
|
|
|
+import java.util.Collection;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
+
|
|
|
+public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
|
|
|
+
|
|
|
+ private final Sql<T> sql;
|
|
|
+
|
|
|
+ protected Where(Sql<T> sql) {
|
|
|
+ this.sql = sql;
|
|
|
+ super.initNeed();
|
|
|
+ }
|
|
|
+
|
|
|
+ private Where(Sql<T> sql, T entity, Class<T> entityClass, AtomicInteger paramNameSeq,
|
|
|
+ Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments, SharedString paramAlias,
|
|
|
+ SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
|
|
|
+ super.setEntity(entity);
|
|
|
+ super.setEntityClass(entityClass);
|
|
|
+ this.paramNameSeq = paramNameSeq;
|
|
|
+ this.paramNameValuePairs = paramNameValuePairs;
|
|
|
+ this.expression = mergeSegments;
|
|
|
+ this.paramAlias = paramAlias;
|
|
|
+ this.lastSql = lastSql;
|
|
|
+ this.sqlComment = sqlComment;
|
|
|
+ this.sqlFirst = sqlFirst;
|
|
|
+ this.sql = sql;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 排序
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> orderByAsc(SFunction<K, V> function) {
|
|
|
+ return orderByAsc(FieldUtil.getSqlFieldName(sql.getTableAlias(function), function));
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> orderByAsc(String alias, SFunction<K, V> function) {
|
|
|
+ return orderByAsc(FieldUtil.getSqlFieldName(alias, function));
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> orderByDesc(SFunction<K, V> function) {
|
|
|
+ return orderByDesc(FieldUtil.getSqlFieldName(sql.getTableAlias(function), function));
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> orderByDesc(String alias, SFunction<K, V> function) {
|
|
|
+ return orderByDesc(FieldUtil.getSqlFieldName(alias, function));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * between
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> between(SFunction<K, V> function, Object val1, Object val2) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return between(sqlFieldName, val1, val2);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> between(String alias, SFunction<K, V> function, Object val1, Object val2) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return between(sqlFieldName, val1, val2);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> between(String sqlFieldName, Object val1, Object val2) {
|
|
|
+ return between(ObjectUtil.isAllNotEmpty(val1, val2), sqlFieldName, val1, val2);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * eq
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> eq(SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return eq(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> eq(String alias, SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return eq(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> eq(String sqlFieldName, Object value) {
|
|
|
+ return eq(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * ne
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> ne(SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return ne(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> ne(String alias, SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return ne(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> ne(String sqlFieldName, Object value) {
|
|
|
+ return ne(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * ge
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> ge(SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return ge(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> ge(String alias, SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return ge(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> ge(String sqlFieldName, Object value) {
|
|
|
+ return ge(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * gt
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> gt(SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return gt(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> gt(String alias, SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return gt(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> gt(String sqlFieldName, Object value) {
|
|
|
+ return gt(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * le
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> le(SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return le(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> le(String alias, SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return le(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> le(String sqlFieldName, Object value) {
|
|
|
+ return le(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * lt
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> lt(SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return lt(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> lt(String alias, SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return lt(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> lt(String sqlFieldName, Object value) {
|
|
|
+ return lt(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * like
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> like(SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return like(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> like(String alias, SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return like(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> like(String sqlFieldName, Object value) {
|
|
|
+ return apply(ObjectUtil.isNotEmpty(value), "instr(" + sqlFieldName + ", {0}) > 0", value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * notLike
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> notLike(SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return notLike(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> notLike(String alias, SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return notLike(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> notLike(String sqlFieldName, Object value) {
|
|
|
+ return notLike(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * likeLeft
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> likeLeft(SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return likeLeft(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> likeLeft(String alias, SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return likeLeft(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> likeLeft(String sqlFieldName, Object value) {
|
|
|
+ return likeLeft(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * likeRight
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> likeRight(SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return likeRight(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> likeRight(String alias, SFunction<K, V> function, Object value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return likeRight(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> likeRight(String sqlFieldName, Object value) {
|
|
|
+ return likeRight(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * in
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> in(SFunction<K, V> function, Collection<?> value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return in(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> in(String alias, SFunction<K, V> function, Collection<?> value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return in(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> in(String sqlFieldName, Collection<?> value) {
|
|
|
+ return in(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> in(SFunction<K, V> function, Object... value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return in(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> in(String alias, SFunction<K, V> function, Object... value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return in(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * notIn
|
|
|
+ */
|
|
|
+ public <K, V> Where<T> notIn(SFunction<K, V> function, Collection<?> value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return notIn(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> notIn(String alias, SFunction<K, V> function, Collection<?> value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return notIn(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Where<T> notIn(String sqlFieldName, Collection<?> value) {
|
|
|
+ return notIn(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> notIn(SFunction<K, V> function, Object... value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
|
|
|
+ return notIn(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ public <K, V> Where<T> notIn(String alias, SFunction<K, V> function, Object... value) {
|
|
|
+ String sqlFieldName = FieldUtil.getSqlFieldName(alias, function);
|
|
|
+ return notIn(sqlFieldName, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected Where<T> instance() {
|
|
|
+ return new Where<>(sql, getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(),
|
|
|
+ paramAlias, SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<T> list() {
|
|
|
+ List<Map<String, Object>> list = Sql.mapper.list(sql.getSql(), this);
|
|
|
+ return BeanUtil.copyToList(list, sql.resultCls);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Page<T> page(Page<?> page) {
|
|
|
+ Page<Map<String, Object>> tempPage = Sql.mapper.page(sql.getSql(), page, this);
|
|
|
+
|
|
|
+ Page<T> result = new Page<>();
|
|
|
+ result.setRecords(BeanUtil.copyToList(tempPage.getRecords(), sql.resultCls));
|
|
|
+ result.setPages(tempPage.getPages());
|
|
|
+ result.setSize(tempPage.getSize());
|
|
|
+ result.setTotal(tempPage.getTotal());
|
|
|
+ result.setCurrent(tempPage.getCurrent());
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public T one() {
|
|
|
+ Map<String, Object> one = Sql.mapper.one(sql.getSql(), this);
|
|
|
+ return BeanUtil.copyProperties(one, sql.resultCls);
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getSql() {
|
|
|
+ return sql.getSql() + " " + getCustomSqlSegment();
|
|
|
+ }
|
|
|
+
|
|
|
+}
|