1.问题的提出
有的人可能会遇到这样的代码,看了后难以忍受,缺点如下所述:
-
- 返回类型Object[]数组,至于每一个下标对应哪个字段,没法直观的看到,例如object[11]是什么类型? 字段名是什么? 这个就无法直观得知 .
- sql中复杂的关系导致不可维护,每一个接手的人都要研究sql半天
- 该种动态拼接条件方法导致类似的代码会大量重复,所以IDEA打开的时候黄了半边天.
- 该查询为分页查询,这样写的话,还要再copy一个count查询才能拿到总数,无疑又是代码重复.
- JPA之类框架目的就是少些原生sql语句,大量这样的操作的话,还不如使用dbUtil这样的工具类查询.
1 @Override 2 public List
2.学习QueryDSL
而QueryDSL就可以避免上面全部的问题,在解决问题之前先学习如何使用 .
2.1 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。
- 官网地址:
2.2配置到项目
首先对于queryDSL有两个版本,com.mysema.querydsl
和com.querydsl,
前者是3.X系列,后者是4.X系列,这里使用的是后者.
第一步: Maven引入依赖
com.querydsl querydsl-jpa ${querydsl.version} com.querydsl querydsl-apt ${querydsl.version} provided
第二步: 加入插件,用于生成查询实例
com.mysema.maven apt-maven-plugin 1.1.3 process target/generated-sources/java com.querydsl.apt.jpa.JPAAnnotationProcessor
执行mvn compile
之后,可以找到该target/generated-sources/java,
然后IDEA标示为源代码目录即可.
借鉴链接:https://www.jianshu.com/p/2b68af9aa0f5
共同学习,共同进步,若有补充,欢迎指出,谢谢!