结合 Querydsl-jpa 和 querydsl-sql 以及代码生成
Combining Querydsl-jpa and querydsl-sql and code generation
事情是这样的:
我一直在我的项目中使用 querydsl-jpa
,代码生成从来都不是问题。我在 maven
:
中使用这个插件
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>maven-apt-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/generated-sources</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
现在,我还需要使用 querydsl-sql
显然,我不能使用由 com.querydsl.apt.jpa.JPAAnnotationProcessor
创建的 Q
生成的 类 .这是 maven
中的插件:
<plugin>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-maven-plugin</artifactId>
<version>4.2.1</version>
<executions>
<execution>
<goals>
<goal>export</goal>
</goals>
</execution>
</executions>
<configuration>
<jdbcDriver>com.mysql.cj.jdbc.Driver</jdbcDriver>
<jdbcUrl>jdbc:mysql://localhost:3306/mydatabase</jdbcUrl>
<jdbcUser>root</jdbcUser>
<jdbcPassword></jdbcPassword>
<packageName>com.myproject.domain</packageName>
<targetFolder>${project.basedir}/target/generated-sources/java</targetFolder>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
</dependencies>
</plugin>
挑战
上面的第二个插件为我的 DBMS (MySql) 中的所有模式生成 Q
-类,而我指定了生成 Q
-类 来自.
如何从文件中指定用户名、密码和 jdbcUrl,因为我不想在 git
存储库中存储敏感信息。
在 configuration
元素中使用 schemaPattern
:来自 querydsl docs.
的 "a schema name pattern in LIKE pattern form; must match the schema name as it is stored in the database, multiple can be separated by comma (default: null)"
虽然不能完全满足您的要求,但我相信这是解决此问题的标准方法。 Use encrypted data in a Maven pom.
这是我的解决方案:
- 对于第一个挑战,我还没有找到解决方案本身,而是找到了某种解决方法。我在我的 DBMS (MySql) 中创建了一个用户,该用户对我感兴趣的单一模式具有特权。这样,该用户将无法生成
Q
-类对于其他模式。所以问题一"solved".
虽然我仍然相信在插件中应该能够指定要生成的模式。有趣的是 <schemaPattern></schemaPattern>
正如@Rober Bain 建议的那样 querydsl-sql
文档中也不起作用。
对于挑战二,首先您需要创建一个属性文件 dev.properties
并包含所需的内容
jdbc-url=jdbc:mysql://localhost:3306/myschema?nullNamePatternMatchesAll=true
jdbc-user=my_user
jdbc-password=my_password
然后,包含以下内容 properties-maven-plugin
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>dev.properties</file> // Reference to properties file
</files>
</configuration>
</execution>
</executions>
</plugin>
...并在您的查询-dsl 插件中...
<plugin>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-maven-plugin</artifactId>
<version>4.2.1</version>
<executions>
<execution>
<goals>
<goal>export</goal>
</goals>
</execution>
</executions>
<configuration>
<jdbcDriver>com.mysql.jdbc.Driver</jdbcDriver>
<jdbcUrl>${jdbc-url}</jdbcUrl>
<jdbcUser>${jdbc-user}</jdbcUser>
<jdbcPassword>${jdbc-password}</jdbcPassword>
<packageName>com.myproject.domain</packageName>
<targetFolder>${project.basedir}/target/generated-sources/java</targetFolder>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
</dependencies>
</plugin>
查看此 link 了解更多信息 Read pom.xml configurations from properties file
事情是这样的:
我一直在我的项目中使用
中使用这个插件querydsl-jpa
,代码生成从来都不是问题。我在maven
:<plugin> <groupId>com.mysema.maven</groupId> <artifactId>maven-apt-plugin</artifactId> <version>1.0</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>process</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/generated-sources</outputDirectory> <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor> </configuration> </execution> </executions> </plugin>
现在,我还需要使用
querydsl-sql
显然,我不能使用由com.querydsl.apt.jpa.JPAAnnotationProcessor
创建的Q
生成的 类 .这是maven
中的插件:<plugin> <groupId>com.querydsl</groupId> <artifactId>querydsl-maven-plugin</artifactId> <version>4.2.1</version> <executions> <execution> <goals> <goal>export</goal> </goals> </execution> </executions> <configuration> <jdbcDriver>com.mysql.cj.jdbc.Driver</jdbcDriver> <jdbcUrl>jdbc:mysql://localhost:3306/mydatabase</jdbcUrl> <jdbcUser>root</jdbcUser> <jdbcPassword></jdbcPassword> <packageName>com.myproject.domain</packageName> <targetFolder>${project.basedir}/target/generated-sources/java</targetFolder> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency> </dependencies> </plugin>
挑战
上面的第二个插件为我的 DBMS (MySql) 中的所有模式生成
Q
-类,而我指定了生成Q
-类 来自.如何从文件中指定用户名、密码和 jdbcUrl,因为我不想在
git
存储库中存储敏感信息。
在
configuration
元素中使用schemaPattern
:来自 querydsl docs. 的 "a schema name pattern in LIKE pattern form; must match the schema name as it is stored in the database, multiple can be separated by comma (default: null)"
虽然不能完全满足您的要求,但我相信这是解决此问题的标准方法。 Use encrypted data in a Maven pom.
这是我的解决方案:
- 对于第一个挑战,我还没有找到解决方案本身,而是找到了某种解决方法。我在我的 DBMS (MySql) 中创建了一个用户,该用户对我感兴趣的单一模式具有特权。这样,该用户将无法生成
Q
-类对于其他模式。所以问题一"solved".
虽然我仍然相信在插件中应该能够指定要生成的模式。有趣的是 <schemaPattern></schemaPattern>
正如@Rober Bain 建议的那样 querydsl-sql
文档中也不起作用。
对于挑战二,首先您需要创建一个属性文件
dev.properties
并包含所需的内容jdbc-url=jdbc:mysql://localhost:3306/myschema?nullNamePatternMatchesAll=true
jdbc-user=my_user
jdbc-password=my_password
然后,包含以下内容 properties-maven-plugin
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>1.0-alpha-2</version> <executions> <execution> <phase>initialize</phase> <goals> <goal>read-project-properties</goal> </goals> <configuration> <files> <file>dev.properties</file> // Reference to properties file </files> </configuration> </execution> </executions> </plugin>
...并在您的查询-dsl 插件中...
<plugin> <groupId>com.querydsl</groupId> <artifactId>querydsl-maven-plugin</artifactId> <version>4.2.1</version> <executions> <execution> <goals> <goal>export</goal> </goals> </execution> </executions> <configuration> <jdbcDriver>com.mysql.jdbc.Driver</jdbcDriver> <jdbcUrl>${jdbc-url}</jdbcUrl> <jdbcUser>${jdbc-user}</jdbcUser> <jdbcPassword>${jdbc-password}</jdbcPassword> <packageName>com.myproject.domain</packageName> <targetFolder>${project.basedir}/target/generated-sources/java</targetFolder> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> </dependency> </dependencies> </plugin>
查看此 link 了解更多信息 Read pom.xml configurations from properties file