如何动态拼接mybatisplus查询条件中的and,or

  1. 首先定义一个接口 这个接口会被所有的实体类实现
    public interface DaisyBasicPo extends Serializable {
           
    
    }
    
    
  2. 使用工具类将lambda表达式的参数暴露出来,这个时候我们就可以愉快的随意拼接sql了
    public class DaisyWrapperUtils {
           
    
        /**
         * 将2个wrapper 拼接到一起
         * a =1 and (b =1 or c = 1)
         *
         * @param wrapper      外部的wrapper
         * @param 
         */
        public static <PO extends DaisyBasicPo> QueryWrapper innerAnd(QueryWrapper<PO> wrapper) {
           
            List<QueryWrapper> queryWrappers = new ArrayList<>();
            // 添加一个and 修饰符
            wrapper.and(w -> {
           
                queryWrappers.add(w);
            });
            return queryWrappers.get(0);
        }
    
        /**
         * 将2个wrapper 拼接到一起
         * a =1 or (b = 1 and c = 1)
         *
         * @param wrapper      外部的wrapper
         * @param 
         */
        public static <PO extends DaisyBasicPo> QueryWrapper innerOr(QueryWrapper<PO> wrapper) {
           
            List<QueryWrapper> queryWrappers = new ArrayList<>();
            // 添加一个and 修饰符
            wrapper.or(w -> {
           
                queryWrappers.add(w);
            });
            return queryWrappers.get(0);
        }
    }
    
    

你可能感兴趣的:(mybatis,mybatisplus)