当前使用版本(必填,否则不予处理)
3.3.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
前端每加一个查询,后端都要相应加一个sql字段过滤,有没自动加过滤sql的方法? QueryWrapper能自动填充到自己的比较复杂的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
那没有