当前位置: 首页 > 知识库问答 >
问题:

Querydsl web包含

翟高明
2023-03-14

我正在寻找最简单的方法(尽可能用最少的代码/定制)来提供一个HTTP API来从我的数据库中搜索对象。

到目前为止,我使用的是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”谓词进行搜索。

我找到了这个库:https://bit bucket . org/gt _ tech/spring-data-query DSL-value-operators/src/master/它似乎提供了我需要的东西。

让我有点担心的是,我需要一个新的依赖,而不是Spring本身。这是可用的最佳解决方案吗?如果是,如何使它与我的项目一起工作?我尝试添加maven依赖项,但它不起作用,我需要做其他事情吗?

谢谢

共有1个答案

阴永逸
2023-03-14

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

@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 + "%"));
    }
}
 类似资料:
  • 通过将以下代码片段复制到构建中,我使用netbeans创建了javafx独立应用程序。xml文件 我有x64位版本的jdk环境,所以它创建了只在x64位版本的窗口或操作系统中运行的应用程序。有人能告诉我应该如何改变部署方法,使应用程序在x86位系统上运行。默认情况下netbean占用了64位版本的jdk环境

  • 包文件包含的信息对你的项目文档是很有用的,比如该项目的名称和版本号。当JSDoc生成的文档的时候,可以自动使用项目中package.json文件中的信息。例如,默认的模板在文档中显示项目的名称和版本号。 有两种方法可以将package.json文件中的信息合并到您的文档: 1.在你的JavaScript文件的源路径中,包含package.json文件的路径。JSDoc将使用在源路径中发现的第一个p

  • 正在寻找旧JSF页面的解决方案。我试图使用contains方法根据另一列是否包含单词red box来呈现组合框。 这一个工作和组合框被禁用。 但是,我也想在值不包含红色框时渲染它们,但随后将启用combox。 这是行不通的。 因此,我如何测试的任何想法都不包含特定的单词。我还尝试了choose test when,但由于第一个表。col4值只是一个空字符串。 有什么想法吗?谢谢。

  • 我想创建一个debian包,当安装时,它将用pip安装几个python包。我能想到两种方法: > 将python包安装到一个目录中,然后从该目录生成一个debian包。但这会混淆构建主机(例如其pip元数据),尤其是在主机已经安装了其中一些包的情况下。 用所有python包制作一个debian包,在debian安装和卸载过程中,运行一些脚本来安装/卸载python包。但是这将需要另外两个脚本来维护

  • Includes 允许你静态包含一段Jade, 或者别的存放在单个文件中的东西比如css, html。 非常常见的例子是包含头部和页脚。 假设我们有一个下面目录结构的文件夹: ./layout.jade ./includes/ ./head.jade ./tail.jade 下面是 layout.jade 的内容: html include includes/head

  • 项目中./gradlew build命令产生的jar包没有将build.gradle.kts中的dependencies的依赖包打进去,使用包时提示Package 'xxx.x' is not found ,如何解决呢? 希望:如何解决这个Package 'xxx.x' is not found问题,以及如何指定打的jar包的名称和版本

  • 我有一个结构如下的maven项目: 我希望maven jar插件在构建jar文件时打包到数据库文件夹中。我尝试过包含这里概述的内容:https://maven.apache.org/plugins/maven-jar-plugin/examples/include-exclude.html,但它找不到目录“../database”(或../../database或../../../database

  • 主要内容:在 HTML 中包含 HTML 文件,服务端包含,PHP 实例,客户端包含,AngularJS 包含,实例,runoob.htm 文件代码:,包含 AngularJS 代码,sites.htm 文件代码:,实例,跨域包含,sites.htm 文件代码:,angular_include.php 文件代码:在 AngularJS 中,你可以在 HTML 中包含 HTML 文件。 在 HTML 中包含 HTML 文件 在 HTML 中,目前还不支持包含 HTML 文件的功能。 服务端包含 大