spring-data的Dsl查询

  1. 第一步, 生成查询对象
    在一个jpa项目中加入如下依赖和配置:

    com.querydsl
    querydsl-jpa


    com.querydsl
    querydsl-apt
    provided


    
        
            com.mysema.maven
            apt-maven-plugin
            1.1.3
            
                
                    
                        process
                    
                    
                        target/generated-sources/java
                        com.querydsl.apt.jpa.JPAAnnotationProcessor
                    
                
            
        
    

如果报找不到Inject类还需要加入:


    javax.inject
    javax.inject
    1

然后去命令行运行mvn clean compile (IDEA的compile好像不行), 插件会扫描@Entity对象并且按名称生成查询对象, 例如@Entity class Country会生成class QCountry类, 代码在指定的outputDirectory里

将生成的查询对象移动到项目里

repository继承QueryDslPredicateExecutor

public interface CountryRepository extends JpaRepository, QueryDslPredicateExecutor {
}

下边是一个条件查询的例子, 使用了Pageable

private Page searchByContinent(String continent, Pageable pageable) {
    BooleanBuilder booleanBuilder = new BooleanBuilder();
    if (hasLength(continent)) {
        booleanBuilder.and(QCountry.country.continent.eq(continent));
    }

    return countryRepository.findAll(booleanBuilder.getValue(), pageable);
}

你可能感兴趣的:(spring-data的Dsl查询)