SpringDataJpa使用QueryDSL实现动态SQL功能

SpringDataJpa使用QueryDSL实现动态SQL功能

添加依赖:
<!--queryDSL-->
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
    <version>${querydsl.version}</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.1</version>
</dependency>
添加maven插件:
<!--queryDSL-->
 <plugin>
     <groupId>com.mysema.maven</groupId>
     <artifactId>apt-maven-plugin</artifactId>
     <version>1.1.3</version>
     <executions>
         <execution>
             <goals>
                 <goal>process</goal>
             </goals>
             <configuration>
                 <outputDirectory>target/generated-sources/java</outputDirectory>
                 <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
             </configuration>
         </execution>
     </executions>
     <dependencies>
         <dependency>
             <groupId>com.querydsl</groupId>
             <artifactId>querydsl-apt</artifactId>
             <version>${querydsl.version}</version>
         </dependency>
     </dependencies>
 </plugin>
注入JPAQueryFactory:
/**
 * 作者:guoyzh
 * 时间:2019/12/17 9:00
 * 功能:配置QueryDSL 注入JPAQueryFactory
 */
@Configuration
public class QueryDSLConfig {
    @Autowired
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory getQueryFactory() {
        return new JPAQueryFactory(entityManager);
    }
}
日常使用:
@RunWith(SpringRunner.class)
@SpringBootTest
public class QueryDSLTests {

    @Autowired
    JPAQueryFactory mFactory;

    @Before
    public void before() {

    }

    @Test
    public void testQuery() {
        QStDepartment department = QStDepartment.stDepartment;
        StDepartment info = mFactory.selectFrom(department) // 查哪张表
                .where(department.id.eq("D00003"), department.attachedcompany.like("C0010%")) // 查询条件
                .orderBy(department.id.desc()) // 排序规则
                .fetchFirst();
        System.out.println(JsonUtils.toJson(info));
    }

    @Test
    public void testPage() {
        QStDepartment department = QStDepartment.stDepartment;
        // page必须从1开始
        PageRequest request = PageRequest.of(1, 10);
        List<StDepartment> info = mFactory.selectFrom(department)
                .offset(request.getPageNumber()) // 偏移量
                .limit(request.getPageSize()) // 单页查询数量
                .fetch();
        System.out.println(info);
    }

    @Test
    public void testJoin() {
        QStDepartment department = QStDepartment.stDepartment;
        QStCompany company = QStCompany.stCompany;
        Tuple info = mFactory.select(department, company)
                .from(department)
                .innerJoin(company)
                .on(department.attachedcompany.eq(company.id))
                .where(department.id.eq("D00003"))
                .fetchFirst();
        System.out.println(info.get(department));
    }
}
发布了200 篇原创文章 · 获赞 97 · 访问量 59万+

猜你喜欢

转载自blog.csdn.net/u010838785/article/details/103577184