<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
想问下这个方法怎么使用,搞不懂
先简单解释一下。getObj方法内部又调用了listObjs。listObjs返回一个list,如果有元素的话,只取第一个,没有元素的话,返回null。第二个参数是一个Function函数式接口。就是你不想返回实体了,想返回一个自定义类型对象或其他类型对象,你要进行转换。
看源码,你就明白啦,给你show一下源码
ServiceImpl类
@Override
public <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper) {
return SqlHelper.getObject(log, listObjs(queryWrapper, mapper));
}SqlHelper类
/**
* 从list中取第一条数据返回对应List中泛型的单个结果
*
* @param list ignore
* @param <E> ignore
* @return ignore
*/
public static <E> E getObject(Log log, List<E> list) {
if (CollectionUtils.isNotEmpty(list)) {
int size = list.size();
if (size > 1) {
log.warn(String.format("Warn: execute Method There are %s results.", size));
}
return list.get(0);
}
return null;
}ServiceImpl类
@Override
public <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper) {
return baseMapper.selectObjs(queryWrapper).stream().filter(Objects::nonNull).map(mapper).collect(Collectors.toList());
}@Test
public void getOneTest04() {
queryWrapper.ge("emp_age", 18);
boolean b = employeeService.getObj(queryWrapper, (m) -> {
Employee employee = employeeService.getById((Long)m);
employee.setEmpPhone("-----");
boolean flag = employeeService.updateById(employee);
return flag;
});
System.out.println(b);
}这个大概懂了,就是不知道为什么那个 m 参数是 id集合中的当前id,而不是一个 Employee集合。
然后就是传入 wrapper 条件构造器之后,为什么就直接会有一个 id集合返回--- 哈哈哈 我还是个学生,问题就是多哦,,老师?
能举个栗子不..
就是后面的那个函数式接口不会传参?对8的特性理解不够