有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

结合Querydsljpa和querydslsql的java和代码生成

事情是这样的:

  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. 由于我不想在git存储库中存储敏感信息,如何从文件中指定用户名、密码和jdbcUrl


共 (2) 个答案

  1. # 1 楼答案

    以下是我的解决方案:

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

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

    1. 对于挑战二,首先需要创建一个属性文件,比如dev.properties,其中包含所需的内容

      jdbc-url=jdbc:mysql://localhost:3306/myschema?nullNamePatternMatchesAll=true

      jdbc-user=my_user

      jdbc-password=my_password

      然后,包括以下属性maven插件

         <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> 
      

    查看此链接了解更多信息Read pom.xml configurations from properties file

  2. # 2 楼答案

    1. configuration元素中使用schemaPattern:“类似模式形式的模式名模式;必须与存储在数据库中的模式名匹配,可以用逗号(默认值:null)将多个模式与querydsl docs分隔

    2. 虽然这并不能完全满足你的要求,但我相信这是解决这个问题的标准方法Use encrypted data in a Maven pom