· 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。MONGODB
非常好的一个东西 防止数据库的差异 sql的写错
下面我们来怎么是用querydsl与 spring整合 spring对querdsl提供了 支持 那就是模板方式queryDslJdbcTemplate 封装了querydsl 的处理 怎么使用 我们下一张详细说明
第一步 我们pom要加入相关依赖 上一篇文章 已经加入了querydsl 还需要加入
<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jdbc-core</artifactId><version>1.0.0.RELEASE</version></dependency>
第二步 在spring-jdbc.xml加入
<bean id="queryDslJdbcTemplate" class="org.springframework.data.jdbc.query.QueryDslJdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
第三步 不得不提的就是querydsl 都是使用中间实体Qmodel 也就是querydslModel 这些实体是用工具生成的
生成方式 有好几种 第一种 插件方式 这种方式 注意的就是配置的生成文件目录一定要事先建好,还有个就是querydsl的注解
@QuerySupertype 在父类用
@QueryEntity 在类上用
在相应的实体上加了上述注解后 再在pom.xml加入相应的插件
1.jdbc普通的方式
<plugin><groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.0.8</version>
<dependencies>
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>//切记切记 这个目录一定要事先建好 否则无法生成qmodel
<processor>com.mysema.query.apt.QuerydslAnnotationProcessor</processor>
</configuration>
</execution>
</executions></plugin>
2 hibernate or jpa or spring data 的插件配置
HIBERNATE
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>maven-apt-plugin</artifactId>
<version>0.3.2</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor> com.mysema.query.apt.hibernate.HibernateAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
JPA
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>maven-apt-plugin</artifactId>
<version>0.3.2</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
mongodb
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>maven-apt-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>${generatedSources}<outputDirectory>
<processor>com.mysema.query.mongodb.morphia.MorphiaAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
第二种 数据方式 个人最推荐 也是最好的
在数据库中建好生成表 然后写一个工具类 工具类只要一下几句
MetaDataExporter exporter = new MetaDataExporter();
exporter.setPackageName("com.cn21.talk.qmodel");
exporter.setTargetFolder(new File("src/main/java"));
exporter.setTableNamePattern(tabName);
exporter.export(conn.getMetaData());
执行生成后的Qmodel如图所示
至此 整合querydsl已经全部完成 下一张 将开启querydsl使用教程篇章