querydsl web包含

zvokhttg  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(281)

我正在寻找最简单的方法(尽可能少的代码/定制)来提供一个httpapi来从我的数据库中搜索对象。
到目前为止,我使用的是querydsl和一个spring控制器,它只是委托给底层存储库:

@GetMapping("/folder")
@ResponseBody
public Iterable<Folder> getFolders(Predicate p) {
    return repo.findAll(p);
}

这很有效。例如,我可以做:

http://localhost/api/folder/owner=foo

它返回拥有所有者的所有文件夹 foo .
但是,我无法搜索以给定关键字开头的字段。我希望能够做到这一点:

http://localhost/api/folder/name=foo*

它将返回以开头的所有文件夹 foo . 我不介意语法是否不同,只要我可以用'startswith' predicate 搜索。
我找到了这个图书馆:https://bitbucket.org/gt_tech/spring-data-querydsl-value-operators/src/master/ 似乎能满足我的需要。
我有点担心我需要一个新的依赖项,它不是来自spring本身。这是最好的解决方案吗?如果是这样,如何使它与我的项目一起工作?我尝试添加maven依赖项,但它不起作用,我需要做些别的吗?
谢谢

oymdgrw7

oymdgrw71#

您可以重写绑定以使用类似表达式,如下所示:

@Repository
public interface FolderRepository extends JpaRepository<Folder, Long>, 
       QuerydslPredicateExecutor<Folder>, QuerydslBinderCustomizer<QFolder> {

    @Override
    default void customize(QuerydslBindings bindings, QFolder folder) {
        bindings.bind(folder.owner).first((path, value) -> 
                  path.likeIgnoreCase(value + "%"));
    }
}

相关问题