当前使用版本(必填,否则不予处理)

3.3.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

前端每加一个查询,后端都要相应加一个sql字段过滤,有没自动加过滤sql的方法? QueryWrapper能自动填充到自己的比较复杂的sql返回的字段里做过滤吗?

重现步骤(如果有就写完整)

报错信息

MyBatis-Plus 前端每加一个查询,后端都要相应加一个sql字段过滤,有没自动加过滤sql的方法? MyBatis-Plus 前端每加一个查询,后端都要相应加一个sql字段过滤,有没自动加过滤sql的方法?

Comment From: miemieYaho

没有,不能

Comment From: miemieYaho

你想要哪种自动?

Comment From: gclsoft

    protected List<Object> buildQueryParams(StringBuffer sql, T entity) {
        List<Object> values = new ArrayList<Object>();
        List<Field> list = ReflectUtil.getPropertyFields(entity.getClass());
        for (Field field : list) {
            String name = field.getName();
            if (name.equals("serialVersionUID"))
                continue;
            QueryField annotation = field.getAnnotation(QueryField.class);
            String targetColumn = ReflectUtil.propertyToFieldName(name);
            Column column = field.getAnnotation(Column.class);
            if(column!=null && StringUtils.isNotEmpty(column.name())){
                targetColumn = column.name();
            }
            QueryField.QueryType queryType = null;
            if(annotation!=null){
                targetColumn = annotation.targetColumn();
                if(!StringUtils.isEmpty(targetColumn)){
                    queryType = annotation.queryType();
                }else{
                    continue;
                }
            }

            if (annotation == null || !StringUtils.isEmpty(targetColumn)) {
                // 获得属性值
                Object value = MyBeanUtils.getProperty(entity, name);
                if (!StringUtil.isEmpty(value)) {
                    if (value instanceof String) {
                        if(targetColumn.contains("ID")||targetColumn.contains("id")){//若包含Id,精确匹配
                            sql.append(" and p."+ targetColumn+" = ?");
                            values.add(value);
                        }else{
                            if(queryType == null || queryType.equals(QueryField.QueryType.LIKE)){
                                sql.append(" and p." + targetColumn + " like ?");
                                values.add("%" + value + "%");
                            }else{
                                sql.append(" and p."+ targetColumn+" = ?");
                                values.add(value);
                            }
                        }
                    }
                    //支持数据和日期的区间查询
                    else if (value instanceof Number) {
                        if(queryType == null || queryType.equals(QueryField.QueryType.GT)){
                            sql.append(" and p." + targetColumn + " >= ?");
                        } else if(queryType.equals(QueryField.QueryType.ST)) {
                            sql.append(" and p." + targetColumn + " <= ?");
                        } else{
                            sql.append(" and p."+ targetColumn+" = ?");
                        }
                        values.add(value);
                    }
//
//                  else if (value instanceof Date) {
//                      if(queryType == null || queryType.equals(QueryField.QueryType.GT)){
//                          sql.append(" and p."+ targetColumn+" >= ?");
//                      }else if(queryType.equals(QueryField.QueryType.ST)) {
//                          Utils.maxDate((Date) value);
//                          sql.append(" and p." + targetColumn + " <= ?");
//                      } else{
//                          sql.append(" and p."+ targetColumn+" = ?");
//                      }
//                      values.add(value);
//                  }
                }

            }
        }
        return values;
    }

    @ApiModelProperty(value = "借出人")
    @QueryField(resultField=true,targetColumn="borrow_user",queryType= QueryField.QueryType.EQ)
    private Long borrowUser;

像这种的, 直接把自动拼接好的sql传到xml里

Comment From: gclsoft

这样就不用一行行的加xml,代码自动生成时就指定了QueryField

Comment From: miemieYaho

那没有