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

tech.jhipster.service.mybatis.QueryService Maven / Gradle / Ivy

package tech.jhipster.service.mybatis;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import tech.jhipster.service.filter.Filter;
import tech.jhipster.service.filter.RangeFilter;
import tech.jhipster.service.filter.StringFilter;

import java.util.Objects;
import java.util.function.Consumer;

public interface QueryService {
    default  Consumer> buildSpecification(Filter filter, String field) {
        return buildSpecification(filter, field, false);
    }

    default  Consumer> buildSpecification(Filter filter, String field, Boolean useOr) {
        return (
                queryWrapper -> {
                    boolean noFilter = true;
                    if (filter.getEquals() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.eq(field, filter.getEquals()));
                        } else {
                            queryWrapper.eq(field, filter.getEquals());
                        }
                        noFilter = false;
                    }
                    if (filter.getIn() != null && filter.getIn().size() > 0) {
                        if (useOr) {
                            queryWrapper.or(q -> q.in(field, filter.getIn()));
                        } else {
                            queryWrapper.in(field, filter.getIn());
                        }
                        noFilter = false;
                    }
                    if (filter.getNotIn() != null && filter.getNotIn().size() > 0) {
                        if (useOr) {
                            queryWrapper.or(q -> q.notIn(field, filter.getNotIn()));
                        } else {
                            queryWrapper.notIn(field, filter.getNotIn());
                        }
                        noFilter = false;
                    }
                    if (filter.getNotEquals() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.ne(field, filter.getNotEquals()));
                        } else {
                            queryWrapper.ne(field, filter.getNotEquals());
                        }
                        noFilter = false;
                    }
                    if (filter.getSpecified() != null) {
                        if (filter.getSpecified()) {
                            if (useOr) {
                                queryWrapper.or(q -> q.isNotNull(field));
                            } else {
                                queryWrapper.isNotNull(field);
                            }
                        } else {
                            if (useOr) {
                                queryWrapper.or(q -> q.isNull(field));
                            } else {
                                queryWrapper.isNull(field);
                            }
                        }
                        noFilter = false;
                    }
                    if (noFilter){
                        // 防止为空()
                        if (useOr) {
                            queryWrapper.or(q -> q.eq("1", 1));
                        } else {
                            queryWrapper.eq("1", 1);
                        }
                    }
                }
        );
    }

    default Consumer> buildStringSpecification(StringFilter filter, String field) {
        return buildSpecification(filter, field, false);
    }

    default Consumer> buildStringSpecification(StringFilter filter, String field, Boolean useOr) {
        return buildSpecification(filter, field, useOr);
    }

    default Consumer> buildSpecification(StringFilter filter, String field, Boolean useOr) {
        return (
                queryWrapper -> {
                    boolean noFilter = true;
                    if (filter.getEquals() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.eq(field, filter.getEquals()));
                        } else {
                            queryWrapper.eq(field, filter.getEquals());
                        }
                        noFilter = false;
                    }
                    if (filter.getIn() != null && filter.getIn().size() > 0) {
                        if (useOr) {
                            queryWrapper.or(q -> q.in(field, filter.getIn()));
                        } else {
                            queryWrapper.in(field, filter.getIn());
                        }
                        noFilter = false;
                    }
                    if (filter.getNotIn() != null && filter.getNotIn().size() > 0) {
                        if (useOr) {
                            queryWrapper.or(q -> q.notIn(field, filter.getNotIn()));
                        } else {
                            queryWrapper.notIn(field, filter.getNotIn());
                        }
                        noFilter = false;
                    }
                    if (filter.getContains() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.like(field, filter.getContains()));
                        } else {
                            queryWrapper.like(field, filter.getContains());
                        }
                        noFilter = false;
                    }
                    if (filter.getContainsLeft() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.likeLeft(field, filter.getContainsLeft()));
                        } else {
                            queryWrapper.likeLeft(field, filter.getContainsLeft());
                        }
                        noFilter = false;
                    }
                    if (filter.getContainsRight() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.likeRight(field, filter.getContainsRight()));
                        } else {
                            queryWrapper.likeRight(field, filter.getContainsRight());
                        }
                        noFilter = false;
                    }
                    if (filter.getDoesNotContain() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.notLike(field, filter.getDoesNotContain()));
                        } else {
                            queryWrapper.notLike(field, filter.getDoesNotContain());
                        }
                        noFilter = false;
                    }
                    if (filter.getNotEquals() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.ne(field, filter.getNotEquals()));
                        } else {
                            queryWrapper.ne(field, filter.getNotEquals());
                        }
                        noFilter = false;
                    }
                    if (filter.getSpecified() != null) {
                        if (filter.getSpecified()) {
                            if (useOr) {
                                queryWrapper.or(q -> q.isNotNull(field));
                            } else {
                                queryWrapper.isNotNull(field);
                            }
                        } else {
                            if (useOr) {
                                queryWrapper.or(q -> q.isNull(field));
                            } else {
                                queryWrapper.isNull(field);
                            }
                        }
                        noFilter = false;
                    }
                    if (noFilter) {
                        // 防止为空()
                        if (useOr) {
                            queryWrapper.or(q -> q.eq("1", 1));
                        } else {
                            queryWrapper.eq("1", 1);
                        }
                    }
                }
        );
    }

    default > Consumer> buildRangeSpecification(RangeFilter filter, String field) {
        return buildSpecification(filter, field, false);
    }

    default > Consumer> buildRangeSpecification(RangeFilter filter, String field, Boolean useOr) {
        return buildSpecification(filter, field, useOr);
    }

    default > Consumer> buildSpecification(RangeFilter filter, String field, Boolean useOr) {
        return (
                queryWrapper -> {
                    // 防止为空()
                    if (useOr) {
                        queryWrapper.or(q -> q.eq("1", 1));
                    } else {
                        queryWrapper.eq("1", 1);
                    }
                    if (filter.getEquals() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.eq(field, filter.getEquals()));
                        } else {
                            queryWrapper.eq(field, filter.getEquals());
                        }
                    }
                    if (filter.getIn() != null && filter.getIn().size() > 0) {
                        if (useOr) {
                            queryWrapper.or(q -> q.in(field, filter.getIn()));
                        } else {
                            queryWrapper.in(field, filter.getIn());
                        }
                    }
                    if (filter.getNotIn() != null && filter.getNotIn().size() > 0) {
                        if (useOr) {
                            queryWrapper.or(q -> q.notIn(field, filter.getNotIn()));
                        } else {
                            queryWrapper.notIn(field, filter.getNotIn());
                        }
                    }
                    if (filter.getSpecified() != null) {
                        if (filter.getSpecified()) {
                            if (useOr) {
                                queryWrapper.or(q -> q.isNotNull(field));
                            } else {
                                queryWrapper.isNotNull(field);
                            }
                        } else {
                            if (useOr) {
                                queryWrapper.or(q -> q.isNull(field));
                            } else {
                                queryWrapper.isNull(field);
                            }
                        }
                    }
                    if (filter.getNotEquals() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.ne(field, filter.getNotEquals()));
                        } else {
                            queryWrapper.ne(field, filter.getNotEquals());
                        }
                    }
                    if (filter.getGreaterThan() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.gt(field, filter.getGreaterThan()));
                        } else {
                            queryWrapper.gt(field, filter.getGreaterThan());
                        }
                    }
                    if (filter.getGreaterThanOrEqual() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.ge(field, filter.getGreaterThanOrEqual()));
                        } else {
                            queryWrapper.ge(field, filter.getGreaterThanOrEqual());
                        }
                    }
                    if (filter.getLessThan() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.lt(field, filter.getLessThan()));
                        } else {
                            queryWrapper.lt(field, filter.getLessThan());
                        }
                    }
                    if (filter.getLessThanOrEqual() != null) {
                        if (useOr) {
                            queryWrapper.or(q -> q.le(field, filter.getLessThanOrEqual()));
                        } else {
                            queryWrapper.le(field, filter.getLessThanOrEqual());
                        }
                    }
                    if (filter.getBetween() != null) {
                        if (useOr) {
                            if (filter.getBetween().length >= 2) {
                                if (Objects.nonNull(filter.getBetween()[0]) && Objects.nonNull(filter.getBetween()[1])) {
                                    queryWrapper.or(q -> q.between(field, filter.getBetween()[0], filter.getBetween()[1]));
                                } else if (Objects.nonNull(filter.getBetween()[0])) {
                                    queryWrapper.or(q -> q.ge(field, filter.getBetween()[0]));
                                } else {
                                    queryWrapper.or(q -> q.le(field, filter.getBetween()[1]));
                                }
                            } else if (filter.getBetween().length == 1) {
                                queryWrapper.ge(field, filter.getBetween()[0]);
                            }
                        } else {
                            if (filter.getBetween().length >= 2) {
                                if (Objects.nonNull(filter.getBetween()[0]) && Objects.nonNull(filter.getBetween()[1])) {
                                    queryWrapper.between(field, filter.getBetween()[0], filter.getBetween()[1]);
                                } else if (Objects.nonNull(filter.getBetween()[0])) {
                                    queryWrapper.ge(field, filter.getBetween()[0]);
                                } else {
                                    queryWrapper.le(field, filter.getBetween()[1]);
                                }
                            } else if (filter.getBetween().length == 1) {
                                queryWrapper.ge(field, filter.getBetween()[0]);
                            }
                        }
                    }
                }
        );
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy