标签: querydsl

在elasticsearch中查询DSL中的must和filter之间有什么区别?

我是弹性搜索的新手,我在必须和过滤器之间感到困惑.我想在我的条款之间执行和操作,所以我这样做了

POST/xyz/_search

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "city": "city1"
                    }
                },
                {
                    "term": {
                        "saleType": "sale_type1"
                    }
                }
            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这给了我所需的结果匹配这两个术语,并使用这样的过滤器

POST/xyz/_search

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "city": "city1"
                    }
                }
            ],
            "filter": {
                "term": {
                    "saleType": "sale_type1"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到相同的结果,所以什么时候应该使用must,什么时候应该使用过滤器?有什么不同?

filter querydsl elasticsearch

45
推荐指数
2
解决办法
1万
查看次数

在Spring Data中为同一QueryDSL路径创建多个别名

我有一个扩展的通用Spring Data存储库接口QuerydslBinderCustomizer,允许我自定义查询执行.我正在尝试将内置的基本相等性测试扩展到默认存储库实现中,以便我可以使用Spring Data REST执行其他查询操作.例如:

GET /api/persons?name=Joe%20Smith  // This works by default
GET /api/persons?nameEndsWith=Smith  // This requires custom parameter binding.
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我创建的实体路径的每个别名似乎都覆盖了前面的别名绑定.

@NoRepositoryBean
public interface BaseRepository<T, ID extends Serializable>
    extends PagingAndSortingRepository<T, ID>, QueryDslPredicateExecutor<T>, QuerydslBinderCustomizer { 

    @Override
    @SuppressWarnings("unchecked")
    default void customize(QuerydslBindings bindings, EntityPath entityPath){

        Class<T> model = entityPath.getType();
        Path<T> root = entityPath.getRoot();
        for (Field field: model.getDeclaredFields()){
            if (field.isSynthetic()) continue;
            Class<?> fieldType = field.getType();
            if (fieldType.isAssignableFrom(String.class)){
                // This binding works by itself, but not after the next one is added
                bindings.bind(Expressions.stringPath(root, field.getName())) …
Run Code Online (Sandbox Code Playgroud)

java spring querydsl spring-data spring-data-rest

44
推荐指数
1
解决办法
2134
查看次数

具有任意AND子句的动态spring数据jpa存储库查询

我正在使用Spring data jpa repositories,要求提供不同字段的搜索功能.搜索之前输入的字段是optional.I有5场说EmployeeNumber,Name,Married,ProfessionDateOfBirth.
这里我只需要用户查询给定的值,其他字段应该被忽略.Ex,

Input : EmployeeNumber: ,Name:St,Married: ,Professsion:IT,DateOfBirth: 
Query : Select * from Employee e where Name like 'St%' and Profession like 'IT%';  

Input : EmployeeNumber:10,Name: ,Married: ,Professsion:IT,DateOfBirth:
Query : Select * from Employee e where EmployeeNumber like '10%' and Profession like 'IT%';  
Run Code Online (Sandbox Code Playgroud)

所以我们在这里考虑输入和查询的值.在这种情况下,春季数据是具有限制中提到的这篇文章(不可扩展,所有可能出现的问题,应书面)我使用的Querydsl,但仍存在问题,null待开发领域应该被忽略,几乎所有可能的查询需要.在这case 31 queries.如果搜索字段是6,7,8...??

使用可选字段实现搜索选项的最佳方法是什么?

java spring querydsl spring-data spring-data-jpa

42
推荐指数
3
解决办法
5万
查看次数

比较Querydsl,jOOQ,JEQUEL,activejdbc,iciql和其他查询DSL

有人能指出一些关于可用于Java的不同Query DSL库之间性能比较的资源,如:Querydsl,jOOQ,JEQUEL,activejdbc,iciql等等......

背景:我使用Spring JDBC模板,但仍然需要以纯字符串格式编写查询.虽然我在编写直接查询时没有问题,但我担心直接依赖于DB表名.我不想使用任何ORM框架,如Hibernate或JPA/EclipseLink.我需要尽可能高的原始性能(IMO,它们适用于更多以CRUD为中心的应用程序).我可以为这些DSL提供一些轻微的开销,只要它有点(我相信,它主要是StringBuilder/String连接!)

我考虑过在某些xml中使用外部化的命名查询.但只是试图评估不同的Query DSL库提供的价值.

编辑:更多关于我的要求: 我想知道使用他们的API方法构建中等复杂查询时这些之间的性能比较.我需要的是使用任何这些查询DSL库生成查询字符串并将其传递给Spring JDBC模板.所以,我想知道如果添加这个中间步骤会导致相当大的性能损失,我想使用命名查询或构建我自己的库,它只使用StingBuilder或类似的方法

用jOOQ,iciql,QueryDSL更新我的经验:

虽然我错过了在我的原帖中提到这一点,但我也热衷于易用性和我在实体类中需要的开销(如果需要任何额外的注释或实现).

jOOQ:

  • 需要将实体属性更改为特定于库的方式
  • 可以返回SQL查询字符串

Iciql:

  • 实体可以映射到没有或很少的变化(可以使用总共3种方式映射)
  • 但由此限制只选择查询(更新/删除/ ...再次要求实体更改)

QueryDSL:

  • 使用表绑定实体的多种方法(支持使用JPA注释的库特定方式除外).但我们至少需要修改实体
  • 没有简单/直接的方式来获取查询字符串

(所有观察对我都知之甚少;如果其中任何一个不正确,请更正)

综上所述,我坚持编写命名查询:(但由于Lukas Eder的答案似乎解释了我原来的帖子关注(表现),我接受了他的.

java performance spring-jdbc querydsl jooq

31
推荐指数
2
解决办法
2万
查看次数

Spring Data REST的QueryDSL集成可用于执行更复杂的查询吗?

我目前正在构建一个REST API,我希望客户端可以轻松地过滤特定实体的大多数属性.使用QueryDSL与结合春季数据REST(由奥利弗·基尔克一个例子),让我很容易地通过允许客户通过组合是指性质(如查询参数进行过滤得到我想要的东西90% /users?firstName=Dennis&lastName=Laumen).

我甚至可以通过实现QuerydslBinderCustomizer接口来自定义查询参数和实体属性之间的映射(例如,用于不区分大小写的搜索或部分字符串匹配).这一切都很棒,但我也希望客户能够使用范围过滤某些类型.例如关于像出生日期这样的财产,我想做类似下面的事情,/users?dateOfBirthFrom=1981-1-1&dateOfBirthTo=1981-12-31.基于数字的属性也是如此/users?idFrom=100&idTo=200.我觉得这应该可以使用QuerydslBinderCustomizer界面,但这两个库之间的集成没有得到非常广泛的记录.

总结一下,这可能使用Spring Data REST和QueryDSL吗?如果是这样,怎么样?

spring querydsl spring-data spring-data-jpa spring-data-rest

27
推荐指数
3
解决办法
8883
查看次数

Spring Data JPA和Querydsl使用bean/constructor投影获取列的子集

我有一个实体类如下:

@Entity
public class UserDemo implements Serializable {

    @Id
    private Long id;

    private String username;

    private String createdBy;
    @Version
    private int version;

    /***
     *
     * Getters and setters
     */
}
Run Code Online (Sandbox Code Playgroud)


使用Spring Data JPA和Querydsl如何获取仅包含和添加属性的UserDemo页面?我需要使用分页和搜索.总之,我希望得到与之相同的结果idusername

Page<UserDemo> findAll(Predicate predicate, Pageable pageable);
Run Code Online (Sandbox Code Playgroud)

但填充了UserDemo的有限字段.

jpa querydsl spring-data-jpa

25
推荐指数
3
解决办法
3万
查看次数

在Querydsl中生成Qclasses时,Maven构建和JDK的Eclipse问题

当我在下面添加此代码pom.xml以支持Querydsl时

<plugin>
  <groupId>com.mysema.maven</groupId>
  <artifactId>apt-maven-plugin</artifactId>
  <version>1.0.6</version>
  <executions>
    <execution> 
      <goals>
        <goal>process</goal>
      </goals>
      <configuration>
        <outputDirectory>target/generated-sources/java</outputDirectory>
        <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
      </configuration>
    </execution>
  </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

使用Eclipse构建时出现此错误.我认为它与classpath和JDK jar有关系

You need to run build with JDK or have tools.jar on the classpath.
If this occures during eclipse build make sure you run eclipse under  JDK as well 
(com.mysema.maven:apt-maven-plugin:1.0.6:process:default:generate-sources)
Run Code Online (Sandbox Code Playgroud)

.classpath:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v8.0">
        <attributes>
            <attribute name="owner.project.facets" value="jst.web"/>
        </attributes> …
Run Code Online (Sandbox Code Playgroud)

java eclipse maven querydsl

24
推荐指数
2
解决办法
3万
查看次数

从Gradle构建脚本生成JPA2 Metamodel

我正在尝试为新项目设置Gradle构建脚本.该项目将使用JPA 2和Querydsl.

Querydsl参考文档的下一页中,他们解释了如何为Maven和Ant设置JPAAnnotationProcessor(apt).

我想和Gradle做同样的事情,但我不知道我的心爱的朋友怎么也没有帮我这个.我需要找到一种方法来调用Javac(最好没有任何额外的依赖关系)和参数,以便能够指定apt应该使用的处理器(?)

apt gradle querydsl

20
推荐指数
3
解决办法
1万
查看次数

QuerydslPredicate和泛型类

我有很多控制器使用相同的方法,差异只是实体类.

我想创建通用的BaseController并且QuerydslPredicate注释有问题(不能设置root,这是通用的)

class abstract BaseController<T extends BaseEntity> {
   @Autowired
   private Repository<T, Long> repository;

   @RequestMapping(method = RequestMethod.GET)
   public Page<T> findAll(@QuerydslPredicate Predicate predicate, Pageable pageable) {
      return repository.findAll(predicate, pageable);
   }
}
Run Code Online (Sandbox Code Playgroud)

Method extractTypeInfo from QuerydslPredicateArgumentResolver return T.但是需要Entity类.

我无法将根值设置为QuerydslPredicate(没有类)

@QuerydslPredicate(root = T.class)
Run Code Online (Sandbox Code Playgroud)

有关如何实现这一目标的任何帮助?

java generic-collections querydsl spring-data

18
推荐指数
1
解决办法
786
查看次数

弹性查询DSL:使用术语过滤器的通配符?

我正在尝试使用术语过滤器过滤文档.我不知道如何在过滤器中引入通配符.我试过这样的事情:

"filter":{
  "bool":{
       "must":{
          "terms":{
             "wildcard" :  {
                "aircraft":[
                   "a380*"
                ]
             }
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

但我得到了SearchParseException.有没有办法在过滤器框架中使用通配符?

wildcard querydsl elasticsearch booleanquery

17
推荐指数
1
解决办法
2万
查看次数