`
diecui1202
  • 浏览: 97918 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

QueryDSL学习笔记

    博客分类:
  • Java
阅读更多

最近部门同事在开发统一数据服务层,了解到其底层使用到了QueryDSL,于是花了几个小时在网上看了一下资料,写了一个小例子,供大家参考;

QueryDSL介绍

  • QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询。
  • Querydsl可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者是SQL的查询语句,也就是说QueryDSL是基于各种ORM框架以及SQL之上的一个通用的查询框架。
  • 借助QueryDSL可以在任何支持的ORM框架或者SQL平台上以一种通用的API方式来构建查询。目前QueryDSL支持的平台包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。

 

不多介绍了,有兴趣的可以直接上官网:http://www.querydsl.com/

示例代码

1、根据数据库schema,创建QModel:

/**
 * QMember is a Querydsl query type for QMember
 */
@Schema("PUBLIC")
@Table("MEMBER")
public class QMember extends RelationalPathBase<QMember> {

    private static final long        serialVersionUID = 448912875;

    public static final QMember      member           = new QMember("MEMBER");

    public final StringPath          address          = createString("ADDRESS");

    public final StringPath          city             = createString("CITY");

    public final StringPath          country          = createString("COUNTRY");

    public final StringPath          email            = createString("EMAIL");

    public final StringPath          firstName        = createString("FIRST_NAME");

    public final StringPath          lastName         = createString("LAST_NAME");

    public final StringPath          memberId         = createString("MEMBER_ID");

    public final StringPath          password         = createString("PASSWORD");

    public final StringPath          phone            = createString("PHONE");

    public final PrimaryKey<QMember> memberPk         = createPrimaryKey(memberId);

    public QMember(String variable){
        super(QMember.class, forVariable(variable));
    }

    public QMember(BeanPath<? extends QMember> entity){
        super(entity.getType(), entity.getMetadata());
    }

    public QMember(PathMetadata<?> metadata){
        super(QMember.class, metadata);
    }

}
 

2、根据生成出来的QModel来查询数据:

private static void queryFromDsl(Connection conn) {
	QMember qm = QMember.member;

	SQLTemplates dialect = new HSQLDBTemplates();
	SQLQuery query = new SQLQueryImpl(conn, dialect);
	List<String> lastNames = query.from(qm).list(qm.lastName);
	// select last_name from member
	System.out.println(lastNames);

	SQLQuery query2 = new SQLQueryImpl(conn, dialect);
	System.out.println(query2.from(qm).count());
	// select count(*) from member

	SQLQuery query3 = new SQLQueryImpl(conn, dialect);
	List<Object[]> results = query3.from(qm).orderBy(qm.lastName.desc()).list(qm.firstName, qm.lastName);
	for (Object[] o : results) {
		System.out.println(ToStringBuilder.reflectionToString(o, ToStringStyle.SIMPLE_STYLE));
	}
	// select first_name, last_name from member order by last_name desc

	SQLQuery query4 = new SQLQueryImpl(conn, dialect);
	List<Object[]> members = query4.from(qm).where(qm.lastName.like("last%")).list(qm.all());
	for (Object[] o : members) {
		System.out.println(ToStringBuilder.reflectionToString(o, ToStringStyle.SIMPLE_STYLE));
	}
	// select * from member where last_name like 'last%'
}
 

注意到上面注释的部分,分别对应的是相应查询代码的SQL语句,流式查询语句写起来很爽啊!

更多要做的事情

目前只是写了个很简单的例子,体会了一下它的功能,要大范围使用,需要更深入的研究一下;

 

另外,可能大家已经想到:

  • QueryDSL只是通用的查询框架,不支持写操作
  • 查询出来的结果是List,我们不得不做额外的工作将它转化为领域实体

以上两点也正是统一数据服务层要解决的问题!

 

有兴趣的同学,可以下载附件示例代码!

分享到:
评论
1 楼 ddnzero 2015-11-25  
学习了 ,今天刚看见这框架就来看看是什么。
看来Spring Data JPA + QueryDSL 就是因为Spring Data JPA查询的太简单了。复杂一点的语句要写死人才会用 QueryDSL

相关推荐

    Querydsl中文文档翻译.pdf

    Querydsl 能够诞生, 是因为需要在类型安全的方式下进行HQL查询。 构造的HQL查 询需要拼接字符串, 并且会导致代码难以阅读。 通过纯字符串对领域类型和属性的 不安全引用是基于字符串构建HQL的另一个问题。 随着...

    querydsl依赖jar

    Querydsl是一个强大的Java查询语言库,它提供了类型安全的方式来构建复杂的查询,特别是在处理JPA(Java Persistence API)和其他持久化框架时。这个压缩包包含了两个关键的Querydsl组件:querydsl-jpa-3.7.4.jar和...

    springdata-jpa-querydsl

    《SpringData JPA与Querydsl深度解析》 在Java世界中,Spring Data JPA和Querydsl是两个强大的工具,它们极大地简化了数据访问层的开发...通过深入学习和实践,我们可以更好地掌握这两个工具,提升我们的开发效率。

    QueryDSL中文文档.zip

    在QueryDSL中文文档中,你可能会学习到以下内容: 1. **安装与配置**:如何在项目中引入QueryDSL依赖,以及相关的Maven或Gradle配置。 2. **基础概念**:Q类的创建,查询构造的基本语法,如WHERE子句、JOIN操作、...

    springData使用queryDsl

    Spring Data和Querydsl是Java开发中的两个重要工具,它们在数据访问层提供了高效且灵活的解决方案。Spring Data是一个用于简化数据库访问...通过学习和应用这两个工具,开发者可以更好地管理和处理应用程序的数据需求。

    spring-boot-querydsl.zip

    【标题】"Spring Boot结合QueryDSL使用教程" 在Spring Boot框架中,QueryDSL是一个非常实用的工具,它提供了一种类型安全的...通过学习和实践,开发者能够充分利用QueryDSL的便利性,提升Java开发中的数据查询能力。

    querydsl 官方文档

    QueryDSL官方文档是学习和掌握QueryDSL框架的重要参考资料,它提供了QueryDSL各个方面的使用方法和最佳实践。QueryDSL是一个开源的Java框架,用于在Java语言中编写类型安全的SQL、JPA和JDO查询。通过QueryDSL,...

    Querydsl_Reference.pdf

    Querydsl是一个Java开源框架用于构建类型安全的SQL查询语句。它采用API代替拼凑字符串来构造查询语句。可跟 Hibernate 和 JPA 等框架结合使用。 Querydsl API文档,标准接口使用例

    springboot_querydsl.rar

    《SpringBoot结合Querydsl实现高效查询》 在Java开发领域,SpringBoot以其便捷的配置、快速的启动和强大的生态系统,成为构建微服务的首选框架。而Querydsl则是一款强大的Java查询语言工具,它提供了类型安全的API...

    querydsl中文文档

    QueryDSL是一个为Java开发人员提供类型安全查询构建的框架,它允许开发者以Java类的形式构建查询,而不是编写可能容易出错的字符串。通过这种方式,QueryDSL不仅提高了代码的可读性,也提升了开发效率和类型检查的...

    querydsl-zh_CN.pdf

    Querydsl是一个Java语言中用于构建SQL风格查询的类型安全的框架。它允许开发人员利用静态类型的方法来构建查询,避免了使用字符串拼接或外部配置文件,这样不仅提高了代码的可读性和维护性,还大大减少了出错的可能...

    QueryDsl自动生成QModel(注解扫描annotation-processor)

    ### QueryDsl自动生成QModel(注解扫描annotation-processor) #### 一、概述 QueryDsl 是一种用于简化查询构建的 Java 库,它通过类型安全的方式帮助开发者编写更清晰、更易于维护的查询语句。而在使用 QueryDsl ...

    querydsl-core-2.3.2.zip

    《基于Java EE 6的模块化项目框架:querydsl-core-2.3.2与jbosscce-javaee6-modular-ear-archetype解析》 在IT领域,开源项目一直扮演着推动技术创新的重要角色。今天我们将深入探讨两个相关的开源项目——`...

    querydsl-jpa-2.0.8.zip

    【querydsl-jpa-2.0.8.zip】 Querydsl是一个强大的Java查询工具包,它提供了类型安全的查询API,可以用于JPA、SQL、JDO等多种数据访问技术。在Querydsl JPA中,你可以利用Java对象来构建复杂的JPQL(Java ...

    querydsl-apt-3.2.2.zip

    《Querydsl APT 3.2.2 与 RoboVM JFX78-Compat: 开源项目的深度解析》 Querydsl APT 3.2.2 是一个强大的查询语言工具,它允许开发者...对于Java开发者而言,深入学习和运用这些技术,无疑能够增强自身在业界的竞争力。

    querydsl-collections-3.0.0.zip

    《Querydsl Collections 3.0.0 与 Scala 实现的 Handlebars 模板解析》 在当今的软件开发中,高效的数据处理和...这两个工具的结合,为现代Web应用开发提供了强大而便捷的解决方案,值得广大开发者深入学习和使用。

    SQL查询构建工具Querydsl.zip

    Querydsl是一个Java开源框架用于构建类型安全的SQL查询语句。它采用API代替拼凑字符串来构造查询语句。可跟 Hibernate 和 JPA 等框架结合使用。 基本查询: JPAQuery query = new JPAQuery(entityManager); ...

    springmvc +shiro+querydsl+jpa框架多数据源配置详细说明

    Spring MVC + Shiro + QueryDSL + JPA 框架多数据源配置详细说明 Spring MVC + Shiro + QueryDSL + JPA 框架多数据源配置是当前 Web 应用程序中常见的技术栈组合。该技术栈组合可以提供强大的安全认证、数据查询和...

    spring-boot-jpa-querydsl整合源码

    spring-boot-jpa-querydsl 整合源码

    hibernate五天学习笔记(txt)

    【hibernate五天学习笔记】是一份详细的Java ORM框架Hibernate的学习资料,旨在帮助开发者深入理解和掌握Hibernate的核心概念和技术。ORM(Object-Relational Mapping)是将数据库中的关系数据与Java对象进行映射的...

Global site tag (gtag.js) - Google Analytics