querydsl-maven-plugin的正确使用姿势

querydsl-maven-plugin的原理是,

  1. 遍历编译后的target/classes里面所有的class,处理所有带Entity注解的class,
  2. 处理的时候,会把target/classes里面所有的class都加载到Class Loader中,以免带有Entity注解的class依赖到;
  3. 最后使用反射处理带有Entity注解的class,生成QClass;

编译两次,失败一次,成功一次

问题在第二步,我们要先编译我们写的代码,才能接着执行querydsl-maven-plugin,生成QClass;因为我们的代码中有使用QClass的地方,所以第一次编译肯定会失败,但是会编译成功一部分,因为我们的Entity代码一般是不引用QClass的,所以一般会编译成功,接着我们执行querydsl-maven-plugin插件,这时候Entity的class都编译完了,querydsl-maven-plugin会处理这些class,然后使用反射API获取相关的信息生成QClass,接下来,QClass已经有了,再编译整个项目,就可以编译成功了。

Maven Profile

通过分析querydsl-maven-plugin的源码,只要我们按照如下的步骤编译就可以了:

  1. 只编译Entity注解及其依赖的class
  2. 执行querydsl-maven-plugin插件,生成QClass
  3. 编译整个项目
    使用Maven提供的Profile功能可以达到这个目的,下面给出一个例子配置:
<profiles>
	<profile>
		<id>querydsl-prepare</id>
		<build>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-compiler-plugin</artifactId>
					<configuration>
						<excludes>*</excludes>
						<includes>**/domain/model/*.java</includes>
					</configuration>
				</plugin>
			</plugins>
		</build>
	</profile>
	<profile>
		<id>all</id>
		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
		<build>
			<plugins>
				<plugin>
					<groupId>com.querydsl</groupId>
					<artifactId>querydsl-maven-plugin</artifactId>
					<executions>
						<execution>
							<phase>generate-sources</phase>
							<goals>
								<goal>jpa-export</goal>
							</goals>
							<configuration>
								<targetFolder>target/generated-sources/java</targetFolder>
								<packages>com.fengxin58.cms.ddd.domain.model</packages>
							</configuration>
						</execution>
					</executions>
				</plugin>
				<plugin>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-maven-plugin</artifactId>
				</plugin>
			</plugins>
		</build>
	</profile>
</profiles>

要编译整个项目,只要按顺序执行如下的命令就可以了,

  1. mvn clean
  2. mvn compile -P querydsl-prepare
  3. mvn package -P all

注意:
编译querydsl-prepare profile之前一定要保证target/classes里面没有依赖QClass的class,不然在第三步执行querydsl-maven-plugin的时候load到依赖QClass的class,这时候QClass还没生成,会加载失败;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
querydsl-jpa 是一个基于 Java 语言的开源 ORM 查询框架,它提供了一种类型安全、流畅的 API 接口,使得查询 JPA 实体变得更加容易和简单。通过使用 querydsl-jpa,开发人员可以避免常见的 JPA 查询繁琐和容易出错的情况,同时,也可以享受到类型安全、易于维护和更加高效的查询体验。 querydsl-jpa 的主要特点包括: 1. 类型安全的查询:querydsl-jpa 提供了一种类型安全的查询 API 接口,完全避免了使用字符串拼接的方式来生成 SQL 语句的情况。 2. 支持 JPA 实体:querydsl-jpa 能够直接与 JPA 实体进行交互,从而使得在查询中使用的实体更加类型化和直观。 3. 支持复杂查询操作:querydsl-jpa 支持诸如嵌套子查询、联合查询、分页查询、排序查询等常见的查询操作,从而满足了更加复杂的查询需求。 4. 提供完整的类型支持:querydsl-jpa 支持传统的 SQL 数据类型,例如 INTEGER、VARCHAR 等,也支持 JPA 支持的所有类型,例如 Date、Time、Timestamp、Boolean 等。 5. 可维护性强:querydsl-jpa 生成的查询语句易于阅读和维护,从而减少了因为 SQL 语句难以阅读和理解而带来的错误和困难。 综上所述,querydsl-jpa 是一种高效、易用、类型安全、并且具有完整类型支持的 ORM 查询框架,它极大地方便了 Java 开发人员进行 JPA 实体查询操作,提高了项目的开发效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈振阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值