主要目的: 处理前端只想查询其中的某些字段, 返回所有数据太多,又不想扩展接口的时候使用
1、传入动态字段
// 获取逗号分割的需要的字符串
String fieldValues = param.getFieldValues();
2、拼接语句查询即可
LambdaQueryWrapper<CreditPointRuleClass> queryWrapper = new LambdaQueryWrapper<>();
// 只查询某些字段
if (StringUtils.isNotBlank(fieldValues)) {
Predicate<TableFieldInfo> predicate = null;
String[] fieldValuesArray = fieldValues.split(",");
for (String field : fieldValuesArray) {
predicate = predicate == null ? p -> p.getColumn().equals(field) : predicate.or(p -> p.getColumn().equals(field));
}
queryWrapper.select(CreditPointRuleClass.class,predicate);
}
3、优化为工具类
3.1、工具
/**
* mybatis 查询工具
*/
public class MybatisPlusUtil {
/**
* 只返回 指定字段
*
* @author wangsong
* @email 1720696548@qq.com
* @date 2022/4/28 10:15
*/
public static <T> void fieldValues(String fieldValues, LambdaQueryWrapper<T> queryWrapper, Class<T> aClass) {
if (StringUtils.isNotBlank(fieldValues)) {
Predicate<TableFieldInfo> predicate = null;
String[] fieldValuesArray = fieldValues.split(",");
for (String field : fieldValuesArray) {
predicate = predicate == null ? p -> p.getColumn().equals(field) : predicate.or(p -> p.getColumn().equals(field));
}
queryWrapper.select(aClass, predicate);
}
}
}
使用
LambdaQueryWrapper<CreditPointRuleClass> queryWrapper = new LambdaQueryWrapper<>();
MybatisPlusUtil.fieldValues(fieldValues, queryWrapper, CreditPointRuleClass.class);