众所周知,在 Mybatis plus 里可以通过这种方式来查询数据:
QueryWrapper<PositionInfo> query = new QueryWrapper<>();
query.lambda().orderByDesc(PositionInfo::getGmtModified);
其中
PositionInfo::getGmtModified是通过自定义函数的方式,将对象的属性传递给QueryWrapper写法可以说是相当优雅了。
MybatisPlus 对这种优雅的方式做了深度的封装,涉及缓存和多个对象传递,重写一遍会很复杂,不过如果只是拿来使用就很简单了,例子如下:
public class YxtXmlUtil {
public static <T> String getXmlValue(Map<String, Object> valueMap, Map<String, Field> fieldMap, SFunction<T, ?> func) {
String name = getColumnName(func);
String propertyName = fieldMap.get(name).getAnnotation(TableField.class).value();
return Convert.toStr(valueMap.get(propertyName), "");
}
public static <T> String getColumnName(SFunction<T, ?> func) {
SerializedLambda resolve = LambdaUtils.resolve(func);
return PropertyNamer.methodToProperty(resolve.getImplMethodName());
}
}
//使用方式
YxtXmlUtil.getXmlValue(valueMap, fieldMap, OrgOuInfo::getZid)
这个是我获取xml对象时写的工具,核心是
getColumnName方法,用到了Mybatis的工具,可以看出依赖MybatisPlus来使用,还是很简单的。