结合 Querydsl-jpa 和 querydsl-sql 以及代码生成

Combining Querydsl-jpa and querydsl-sql and code generation

事情是这样的:

  1. 我一直在我的项目中使用 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>
    
  2. 现在,我还需要使用 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>
    

挑战

  1. 上面的第二个插件为我的 DBMS (MySql) 中的所有模式生成 Q-类,而我指定了生成 Q-类 来自.

  2. 如何从文件中指定用户名、密码和 jdbcUrl,因为我不想在 git 存储库中存储敏感信息。

  1. configuration 元素中使用 schemaPattern:来自 querydsl docs.

  2. 的 "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)"
  3. 虽然不能完全满足您的要求,但我相信这是解决此问题的标准方法。 Use encrypted data in a Maven pom.

这是我的解决方案:

  1. 对于第一个挑战,我还没有找到解决方案本身,而是找到了某种解决方法。我在我的 DBMS (MySql) 中创建了一个用户,该用户对我感兴趣的单一模式具有特权。这样,该用户将无法生成 Q-类对于其他模式。所以问题一"solved".

虽然我仍然相信在插件中应该能够指定要生成的模式。有趣的是 <schemaPattern></schemaPattern> 正如@Rober Bain 建议的那样 querydsl-sql 文档中也不起作用。

  1. 对于挑战二,首先您需要创建一个属性文件 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