【版本任你发】-1-为字符串加上MySQL通配符

103 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

1.背景

  看到各路神仙,讲Java8,我都很喜欢,但是自己没讲过,那就不能算是讲烂了!

  所以这一回,我们来个【版本任你发】系列作品,好,来个图!

版本任你发,我用Java8!

  我怎么讲呢?我没有什么规矩,我工作中怎么用的,我就怎么聊!我只聊用法,咱们风格就是大力出奇迹!开整!

2.like %whatever%这件小事

  通常,我们非常喜欢写这样的代码:

        String name = companyPageSO.getName();
        if (StringUtils.isNotBlank(name)) {
            companyPageSO.setName("%" + name + "%");
        }

  有些同志就说话了,我不是这么写,我是加一个util来干这个加%的事儿。

    public static String wildcardLike(String columnValue) {
        return "%" + columnValue + "%";
    }

  好,那现在代码就变成这样了:

        String name = companyPageSO.getName();
        if (StringUtils.isNotBlank(name)) {
            companyPageSO.setName(SqlUtil.wildcardLike(name));
        }

  我敬你一杯,但是这个我也不想写,我 getter、setter 方法给它指定一下,这个代码的逻辑,我要封装,怎么搞?

  你也许会说,这不可行吧?怎么能传递函数呢?其实我们在写 C++ 的时候经常传递函数指针和引用,怎么到了 Java 变成小绵羊了?在 JDK8 中,就给我们提供了 Function 家族,我们上面的代码,完全可以提取为一个通用的逻辑!

    /**
     * 若当前字符串非空,进行通配
     *
     * @param t      当前对象
     * @param getter Getter 方法,例如 {@link A#getName()}
     * @param setter Setter 方法,例如 {@link A#setName(String)}
     * @param <T>    任意对象
     */
    public static <T> void wildcardLikeWhenStringIsNotBlank(T t, Function<T, String> getter, BiConsumer<T, String> setter) {
        if (t == null) {
            return;
        }
        if (getter == null) {
            return;
        }
        if (setter == null) {
            return;
        }
        String str = getter.apply(t);
        if (StringUtils.isNotBlank(str)) {
            str = SqlUtil.wildcardLike(str);
            setter.accept(t, str);
        }
    }

  调用的时候,就是输入操作的对象和对应的函数。

SqlUtil.wildcardLikeWhenStringIsNotBlank(companyPageSO, CompanyPageSO::getName, CompanyPageSO::setName);

  这种传递函数的感觉给我记住,给我拿捏!别说JAVA8不爱你!拼命封装吧!