精华内容
下载资源
问答
  • Querydsl

    千次阅读 2016-03-10 16:05:00
    Querydsl是一个Java开源框架用于构建类型安全的SQL查询语句。它采用API代替拼凑字符串来构造查询语句。可跟 Hibernate 和 JPA 等框架结合使用。 基本查询: ? 1 2 3 4 5 6 JPAQuery query ...

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

    基本查询:

    ?
    1
    2
    3
    4
    5
    6
    JPAQuery query =  new  JPAQuery(entityManager);
    List<Person> persons = query.from(person)
       .where(
         person.firstName.eq( "John" ),
         person.lastName.eq( "Doe" ))
       .list(person);

    子查询:

    ?
    1
    2
    3
    4
    5
    List<Person> persons = query.from(person)
       .where(person.children.size().eq(
         new  JPASubQuery().from(parent)
             .uniqueResult(parent.children.size().max())
       )).list(person);

    排序:

    ?
    1
    2
    3
    4
    List<Person> persons = query.from(person)
       .orderBy(person.lastName.asc(), 
                person.firstName.desc())
       .list(person);
     
     
    http://www.oschina.net/search?scope=project&q=Querydsl
     
    https://github.com/querydsl/querydsl
    http://www.querydsl.com/
    展开全文
  • QueryDSL

    2020-06-02 04:13:56
  • querydsl-源码

    2021-03-14 13:04:52
    querydsl
  • querydsl:研究QueryDSL
  • QueryDSL; Sprint Boot子; Spring MVC; JPA或MongoDB的Spring数据; 所有项目都很简单,专为学习目的而开发。 每个项目都设置数据,并利用来自各种过滤器,排序和分页的灵活搜索/查询功能。 每个项目都展示了...
  • querydsl_Querydsl版本1.6.0

    2020-07-09 09:27:31
    querydsl 现在可以下载Querydsl的 1.6.0版本 。 Querydsl是用于构造静态类型的类似于SQL的查询的框架,该框架支持JDO,Java集合,JPA,通过JDBCSQL,Lucene和Hibernate Search。 该版本将JPA 1依赖关系替换为...

    querydsl

    现在可以下载Querydsl的 1.6.0版本

    Querydsl是用于构造静态类型的类似于SQL的查询的框架,该框架支持JDO,Java集合,JPA,通过JDBCSQL,Lucene和Hibernate Search。

    该版本将JPA 1依赖关系替换为JPA 2,并引入了合并支持。


    翻译自: https://jaxenter.com/querydsl-version-1-6-0-100965.html

    querydsl

    展开全文
  • 关于 QueryDSL 配置和使用(详细)

    万次阅读 2019-07-15 16:34:33
    关于 QueryDSL 最近写项目,使用到了 Jpa 这个 ORM 规范支持,使用注解的方式实现 Sql ,但是用过 Jpa 的同学都知道 Jpa 对于单表操作很灵活,但是对于复杂一些的 SQL 就是很不友好了,所以这个地方我们就用到了 ...

    关于 QueryDSL 

        最近写项目,使用到了 Jpa 这个 ORM 规范支持,使用注解的方式实现 Sql ,但是用过 Jpa 的同学都知道 Jpa 对于单表操作很灵活,但是对于复杂一些的 SQL 就是很不友好了,所以这个地方我们就用到了 QueryDSL 来实现复杂的 Sql(另外强行安利一波 Tk-MyBatis)

    什么是 QueryDSL ? 

        QueryDSL仅仅是一个通用的查询框架,专注于通过 JavaAPI 构建类型安全的 Sql 查询,也可以说 QueryDSL 是基于各种 ORM 框架以及 Sql 之上的一个通用的查询框架,QueryDSL 的查询,类是于 SQL 查询,很全面只不过一个是用 SQL 一个是用代码来代替 SQL -- 不多了解 QueryDSL 的其他方面了,直接进入看配置和代码吧,毕竟博主也是刚刚接触这个查询框架,就不做过多的误导了

    说一下,下面示例的环境 -- MyBatis + IDEA + JPA + QueryDSL

    ---------------------------------------------------- 手动分界线 ----------------------------------------------------

    以下为项目操作(创建项目的操作就先省略掉了,这个应该都会,不会的可以去看博主的其他博客):

    首先配置 pom.xml 更古不变的定律  T_T!!  对了在安利一个插件 lombok,配合 QueryDSL 可能会更好

    <!-- QueryDSL 相关依赖 -->
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- lombok 相关依赖 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.10</version>
        <scope>provided</scope>
    </dependency>

    Ps:lombok 可以已注解的方式来对代码进行简化,省去了 get 和 set 方法,至于怎么使用 lombok ,先看本文示例吧

    配置 application.properties 文件

    server.port=8080
    server.servlet.context-path=/
    server.tomcat.uri-encoding=utf-8
    ###添加 MySQL 数据库配置
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/boot_test?serverTimezone=UTC&characterEncoding=UTF-8&useUnicode=true
    ###用户名
    spring.datasource.username=xxx
    ###密码
    spring.datasource.password=xxx
    ###驱动
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    #是否自动生/更新成表,根据什么策略
    spring.jpa.hibernate.ddl-auto=update
    #JPA配置
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
    spring.jpa.properties.hibernate.legacy_limit_handler=true
    #是否展示sql
    spring.jpa.show-sql= true

    创建 entiy 层,因为要先创建完实体类才可以去生成 QueryDSL

    package com.cs.querydsl.model;
    
    import lombok.Data;
    import org.hibernate.annotations.GenericGenerator;
    
    import javax.persistence.*;
    
    /**
     * @ClassName:User
     * @Description:TODO User 实体类
     * @Author LinLuoChen
     * @Date 2019/7/10/14:02
     * @Version V1.0
     **/
    
    @Data // lombok 工具省去了 GET SET 方法
    @Entity // 声明这个是一个实体类
    @Table(name="user") // 对应的数据库的那个表
    public class User {
    
        /**
         * @Description ID
         * @Author LinLuoChen
         * @Date  10:44
         **/
        @Id
        @GenericGenerator(name="id", strategy="uuid") // 这里我们的 ID 用的是 UUID
        @GeneratedValue(generator="id")
        private Integer id;
    
        /**
         * @Description 姓名
         * @Author LinLuoChen
         * @Date  10:44
         **/
        @Column(name = "name")
        private String name;
    
        /**
         * @Description 密码
         * @Author LinLuoChen
         * @Date  10:44
         **/
        @Column(name = "password")
        private String password;
    }
    

    然后生成我们的 Q实体类,第一步点击右侧 Maven 然后选择第一个文件夹,双击 compile 它会自动运行,运行成功后会生成一个 QUser 的实体类 ,因为我们的实体类叫做 User 他是根据我们实体类来生成的

    开始编写 Dao 层,引入JPA 的接口 -- !!重要 !!!

    package com.cs.querydsl.dao;
    
    import com.cs.querydsl.model.User;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
    import org.springframework.data.repository.PagingAndSortingRepository;
    
    /**
     * @ClassName:UserDao
     * @Description:TODO 用来继承 Jpa 接口
     * @Author LinLuoChen
     * @Date 2019/7/10/14:06
     * @Version V1.0
     **/
    public interface UserDao extends JpaRepository<User, String>, JpaSpecificationExecutor<User>, PagingAndSortingRepository<User, String> {
        // -----
    }
    

    这里我们省略 Service 层 直接看 Impl 接口实现类,这里就先写一个单表查询进行测试

    package com.cs.querydsl.service.impl;
    
    import com.cs.querydsl.dao.UserDao;
    import com.cs.querydsl.model.QUser;
    import com.cs.querydsl.model.User;
    import com.cs.querydsl.service.UserService;
    import com.querydsl.core.BooleanBuilder;
    import com.querydsl.core.types.Projections;
    import com.querydsl.jpa.impl.JPAQueryFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.thymeleaf.util.StringUtils;
    
    import javax.annotation.PostConstruct;
    import javax.persistence.EntityManager;
    import java.util.List;
    
    /**
     * @ClassName:UserServiceImpl
     * @Description:TODO 接口实现类
     * @Author LinLuoChen
     * @Date 2019/7/10/14:09
     * @Version V1.0
     **/
    @Service
    public class UserServiceImpl implements UserService {
    
        @Autowired
        UserDao userDao;
    
        @Autowired
        private EntityManager entityManager;
    
        //查询工厂实体
        private JPAQueryFactory queryFactory;
    
        //实例化控制器完成后执行该方法实例化JPAQueryFactory
        @PostConstruct
        public void initFactory()
        {
            queryFactory = new JPAQueryFactory(entityManager);
        }
    
        /**
         * @Description 查询全部
         * @Author LinLuoChen
         * @Date  10:53
         * @return java.util.List<com.cs.querydsl.model.User>
         **/
        @Override
        public List<User> findAll(User user) {
            // 使用 QueryDSL 进行查询
            QUser qUser = QUser.user;
            // 定于获取条件
            BooleanBuilder booleanBuilder = new BooleanBuilder();
            // 要查询的条件
            if(!StringUtils.isEmpty(user.getName())){
                // 放入要查询的条件信息
                booleanBuilder.and(qUser.name.contains(user.getName()));
            }
            // queryFactory 是上方定义的工厂实体 
            // select(生成的实体类的字段).from(生成实体类的名称).where(上方要查询的条件).orderBy(排序).fetch()进行查询
            return queryFactory.select(qUser)
                    .from(qUser)
                    .where(booleanBuilder)
                    .orderBy(qUser.name.desc())
                    .fetch();
        }
    }
    

    我们直接写一个测试类进行测试

    package com.cs.querydsl;
    
    import com.cs.querydsl.model.User;
    import com.cs.querydsl.service.UserService;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.util.List;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class QuerydslApplicationTests {
    
        @Autowired
        UserService userService;
    
        @Test
        public void contextLoads() {
        }
    
        /**
         * @Description 测试查询全部方法
         * @Author LinLuoChen
         * @Date  11:22
         **/
        @Test
        public void  QueryDSLTest(){
            User user = new User();
            List<User> list = userService.findAll(user);
            System.out.println(list);
        }
    
    }
    

    测试结果,可以运行 ~~

    虽然说 QueryDSL 也可以做增删改查,但是个人不建议使用(仅限单表),因为单表操作,其实使用 Jpa 就可以了,包括 Jpa 的动态查询,都是很适合单表的,不管是代码量还是效率个人感觉都比 QueryDSL 要快,尤其是代码量,少了不止一点半点,但是连表操作的话,就比较偏向于 QueryDSL 了,特别好用!!下边是连表操作的 QueryDSL ,另外说一下上边只是演示一下 QueryDSL 的使用方法,单表还是建议用 Jpa 比较快!

    ---------------------------------------------------- 手动分界线 ---------------------------------------------------- 

    package com.cs.querydsl.service.impl;
    
    import com.cs.querydsl.dao.LocDao;
    import com.cs.querydsl.model.Loc;
    import com.cs.querydsl.model.QLoc;
    import com.cs.querydsl.model.QUser;
    import com.cs.querydsl.service.LocService;
    import com.querydsl.core.BooleanBuilder;
    import com.querydsl.core.QueryResults;
    import com.querydsl.core.Tuple;
    import com.querydsl.jpa.impl.JPAQueryFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.thymeleaf.util.StringUtils;
    
    import javax.annotation.PostConstruct;
    import javax.persistence.EntityManager;
    import java.util.List;
    import java.util.stream.Collectors;
    
    /**
     * @ClassName:LocServiceImpl
     * @Description:TODO 接口实现类
     * @Author LinLuoChen
     * @Date 2019/7/10/14:09
     * @Version V1.0
     **/
    @Service
    public class LocServiceImpl implements LocService {
    
        @Autowired
        LocDao locDao;
    
        @Autowired
        private EntityManager entityManager;
    
        //查询工厂实体
        private JPAQueryFactory queryFactory;
    
        //实例化控制器完成后执行该方法实例化JPAQueryFactory
        @PostConstruct
        public void initFactory()
        {
            queryFactory = new JPAQueryFactory(entityManager);
        }
    
        /**
         * @Description 查询全部
         * @Author LinLuoChen
         * @Date  10:53
         * @return java.util.List<com.cs.querydsl.model.Loc>
         **/
        @Override
        public List<Loc> findAll(Loc loc) {
            // 使用 QueryDSL 进行查询
            QLoc qLoc = QLoc.loc1;
            QUser qUser = QUser.user;
            // 定于获取条件
            BooleanBuilder booleanBuilder = new BooleanBuilder();
            // 要查询的条件
            if(!StringUtils.isEmpty(loc.getLoc())){
                // 放入要查询的条件信息
                booleanBuilder.and(qLoc.loc.contains(loc.getLoc()));
            }
            //连接查询条件(Loc.id = User.id )
            booleanBuilder.and(qLoc.id.eq(qUser.id));
            // 使用 QueryDSL 进行多表联合查询
            QueryResults<Tuple> listResult = queryFactory
                    .select(QLoc.loc1,QUser.user)
                    .from(qLoc, qUser)//查询两表
                    .where(booleanBuilder)
                    .fetchResults();
            //遍历 java8 自带流转换成集合
            List<Loc> collect = listResult.getResults().stream().map(tuple -> {
                Loc lcs = tuple.get(qLoc);
                return lcs;
            }).collect(Collectors.toList());
            return collect;
        }
    }
    

    查看结果

    源码示例地址:https://download.csdn.net/download/qq_36537546/11356940

    展开全文
  • querydsl中文文档

    2018-09-29 14:36:19
    querydsl中文文档,旨在帮助使用QueryDSL的开发程序人员使用
  • querydsl依赖jar

    2018-09-20 09:34:40
    压缩包里面有两个jar,queyrdsl-jpa-3.7.4.jar、querydsl-apt-3.7.4.jar
  • Querydsl-POC 为什么使用 Querydsl ? 类型安全查询(从实体生成的 QClasses 查询,不涉及字符串!) 通过 IDE 和自动完成进行查询验证 动态查询(与 HQL 字符串相比) 简单的语法(与标准相比) 此 POC 使用:...
  • minimal-maven-kotlin-querydsl-example:最小Maven Kotlin和Querydsl示例
  • QueryDSL依赖

    2018-09-28 08:40:50
    这是使用QueryDSL必须要的依赖 &lt;dependency&gt; &lt;groupId&gt;com.mysema.querydsl&lt;/groupId&gt; &lt;artifactId&gt;querydsl-apt&lt;/artifactId&gt; &lt...
  • QueryDSL介绍

    千次阅读 2018-10-22 18:56:36
    1,QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询。 2,Querydsl可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者是SQL的查询语句,也就是说QueryDSL是基于各种ORM...
  • QueryDSL中文文档.zip

    2021-09-07 15:09:32
    Querydsl 是一个能使用静态类型构建类似于SQL的查询的框架。Querydsl 通过流 畅的API调用来构建原本需要用字符串连接或外部XML文件配置的查询....
  • querydsl使用文档

    2016-12-25 21:39:23
    querydsl的使用文档,描述了与maven自动生成、jpa等的使用方法。
  • springboot_querydsl.rar

    2021-04-14 17:22:55
    springboot2.x整合querydsl4.3.1例子
  • queryDsl初学

    2020-10-23 13:57:06
    本文主要介绍springboot + jpa + query dsl的一系列操作,...http://www.querydsl.com/static/querydsl/4.2.1/reference/html_single/ 1、新建一个springboot + jpa 项目 这个不多说,都会的。我使用的是postgresql...
  • Spring启动querydsl 使用Querydsl的示例Spring Boot应用程序 笔记 使用QueryDSL的好处是:IDE中的代码完成,类型安全,一致,可以应用于各种rdbms,其他nosql, 参考 官方-http:
  • jpa querydsl 在我的上一篇文章中: JPA –基本投影 –我提到了构建JPA投影的两种基本可能性。 这篇文章为您带来了更多示例,这次基于Querydsl框架。 注意,这里我指的是Querydsl版本3.1.1。 重塑构造函数表达式 ...
  • Querydsl 能够诞生, 是因为需要在类型安全的方式下进行HQL查询。 构造的HQL查 询需要拼接字符串, 并且会导致代码难以阅读。 通过纯字符串对领域类型和属性的 不安全引用是基于字符串构建HQL的另一个问题。 随着...
  • querydsl-showcase JPQL,JPA和Querydsl的较小比较。 在深入研究代码之前,您可能需要熟悉简短的。 项目包含五个常见SQL查询的三种不同实现 按顺序和分页进行选择CustomerRepository#findAll 根据条件选择...
  • querydsl配置ecm 帮助将Querydsl配置注册为OSGi服务的组件。
  • <artifactId>querydsl-xo <version>0.0.1-SNAPSHOT 入门 请访问项目 wiki 获取最新信息: : 执照 querydsl-xo是在 Apache License 2.0 下贡献的。 建造 在命令行上启动 Maven 构建 mvn clean package 持续构建
  • android-querydsl 在 Android 上使用 QueryDSL、SQLDroid 和 Flyway 的示例项目。 用 Maven 构建。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,907
精华内容 1,162
关键字:

querydsl