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

org.zodiac.mybatisplus.binding.helper.WrapperHelper Maven / Gradle / Ivy

There is a newer version: 1.6.8
Show newest version
package org.zodiac.mybatisplus.binding.helper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.Query;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;

import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.zodiac.commons.constants.DatabaseConstants;
import org.zodiac.commons.util.lang.Strings;
import org.zodiac.core.data.copy.Accept;
import org.zodiac.core.util.SQLCheckUtil;
import org.zodiac.mybatisplus.binding.cache.BindingCacheManager;
import org.zodiac.sdk.toolkit.util.lang.StrUtil;

public class WrapperHelper {

    public static void buildOrderBy(QueryWrapper query, String orderBy, Function field2column) {
        /*解析排序。*/
        if (StrUtil.isNotBlank(orderBy)) {
            for (String field : Strings.split(orderBy, Strings.COMMA)) {
                SQLCheckUtil.securityCheck(field);
                String[] fieldAndOrder = field.split(Strings.COLON);
                String columnName = field2column.apply(fieldAndOrder[0]);
                if (fieldAndOrder.length > 1 && DatabaseConstants.ORDER_DESC.equalsIgnoreCase(fieldAndOrder[1])) {
                    query.orderByDesc(columnName);
                } else {
                    query.orderByAsc(columnName);
                }
            }
        }
    }

    public static void optimizeSelect(Wrapper query, Class entityClass, Class voClass) {
        if (!(query instanceof Query) || query.getSqlSelect() != null) {
            return;
        }
        ((Query)query).select(entityClass, buildSelectPredicate(voClass));
    }

    public static Predicate buildSelectPredicate(Class voClass) {
        List fieldList = BindingCacheManager.getFields(voClass).stream().flatMap(field -> {
            Accept accept = field.getAnnotation(Accept.class);
            return accept == null ? Stream.of(field.getName())
                : accept.override() ? Stream.of(accept.name()) : Stream.of(field.getName(), accept.name());
        }).collect(Collectors.toList());
        return fieldInfo -> fieldList.contains(fieldInfo.getField().getName()) && !fieldInfo.isLogicDelete();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy