问答详情
源自:-

其中的方法的使用

<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

想问下这个方法怎么使用,搞不懂

提问者:想好好学习的懒人 2019-12-25 16:51

个回答

  • 老猿
    2019-12-26 09:04:02
    已采纳

           先简单解释一下。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());
    }


  • 想好好学习的懒人
    2019-12-26 13:26:12

    @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集合返回---  哈哈哈 我还是个学生,问题就是多哦,,老师?

  • 想好好学习的懒人
    2019-12-26 09:43:56

    能举个栗子不..

  • 想好好学习的懒人
    2019-12-26 09:35:24

    就是后面的那个函数式接口不会传参?对8的特性理解不够