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

com.github.yulichang.extension.mapping.wrapper.MappingQuery Maven / Gradle / Ivy

package com.github.yulichang.extension.mapping.wrapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.enums.SqlKeyword;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.extension.mapping.mapper.MPJMappingWrapper;
import com.github.yulichang.extension.mapping.mapper.MPJTableFieldInfo;

import java.util.List;

public class MappingQuery extends QueryWrapper {

    /**
     * 公开 addCondition 方法
     */
    @Override
    public QueryWrapper addCondition(boolean condition, String column, SqlKeyword sqlKeyword, Object val) {
        return super.addCondition(condition, column, sqlKeyword, val);
    }

    /**
     * 映射 wrapper 构造器
     * 仅对使用映射注解时使用
     */
    public static  List mpjQueryList(BaseMapper baseMapper, SqlKeyword keyword,
                                           String column, Object val, MPJTableFieldInfo fieldInfo) {
        MPJMappingWrapper infoWrapper = fieldInfo.getWrapper();
        MappingQuery wrapper = new MappingQuery<>();
        if (infoWrapper.isHasCondition()) {
            infoWrapper.getConditionList().forEach(c -> {
                if (c.getKeyword() == SqlKeyword.BETWEEN) {
                    wrapper.between(c.getColumn(), c.getVal()[0], c.getVal()[1]);
                } else if (c.getKeyword() == SqlKeyword.IN) {
                    wrapper.in(c.getColumn(), (Object[]) c.getVal());
                } else {
                    wrapper.addCondition(true, c.getColumn(),
                            c.getKeyword(), c.getVal()[0]);
                }
            });
        }
        wrapper.eq(SqlKeyword.EQ == keyword, column, val);
        //此处不用链式调用,提高效率
        if (infoWrapper.isHasFirst()) {
            wrapper.first(infoWrapper.getFirst());
        }
        if (infoWrapper.isHasOrderByAsc()) {
            //mybatis plus 3.4.3 之后支持数组,但之前版本仅支持可变参数,为了兼容,多个循环处理
            infoWrapper.getOrderByAsc().forEach(wrapper::orderByAsc);
        }
        if (infoWrapper.isHasOrderByDesc()) {
            //mybatis plus 3.4.3 之后支持数组,但之前版本仅支持可变参数,为了兼容,多个循环处理
            infoWrapper.getOrderByDesc().forEach(wrapper::orderByDesc);
        }
        if (infoWrapper.isHasLast()) {
            wrapper.last(infoWrapper.getLast());
        }
        if (SqlKeyword.IN == keyword) {
            wrapper.in(column, (List) val);
        }
        if (infoWrapper.isHasSelect()) {
            wrapper.select(infoWrapper.getSelect());
        }
        if (infoWrapper.isHasApply()) {
            infoWrapper.getApplyList().forEach(a -> wrapper.apply(a.getSql(), (Object[]) a.getVal()));
        }
        return baseMapper.selectList(wrapper);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy