<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的特性理解不够