JOOQ与SQL Server

And*_*dez 3 java sql-server jooq

我是ORM的忠实粉丝,特别是涉及.NET with Entity Framework并使用LINQ使您的数据访问变得不那么繁琐和愉快.

但是,我目前正在研究Java,特别是关注ORM.我已经尝试过针对我们的SQL Server数据库的nHybernate - 并且由于某些表上没有键(唯一约束),我开始关注JOOQ.

我已经设法从SQL Server数据库生成我的Java类 - 但并非没有错误 - 使用JOOQ(v3.2.0).

根据这个页面JOOQ Connections,它提到了一个类org.jooq.util.sqlserver.SQLServerDatabase.但是当我在配置中生成这个时,我得到了class not found异常并且没有生成任何内容.我不得不使用org.jooq.util.jdbc.JDBCDatabase来生成我的代码.

这是我的配置文件(myjooqdbconfig.xml):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.2.0.xsd">
  <jdbc>
    <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
    <url>jdbc:sqlserver://MYSERVER:1433;DatabaseName=MYDB</url>
    <user>MYUSER</user>
    <password>PWD</password>
  </jdbc>

  <generator>
    <name>org.jooq.util.DefaultGenerator</name>

    <database>
      <name>org.jooq.util.jdbc.JDBCDatabase</name>

      <inputSchema>dbo</inputSchema>

      <includes>.*</includes>

      <excludes></excludes>
    </database>

    <target>
      <packageName>com.quorum.sentinel.dataAccess</packageName>

      <directory>F:\Libraries\jooq\jOOQ-3.2.0\lib\gen</directory>
    </target>
  </generator>
</configuration>
Run Code Online (Sandbox Code Playgroud)

在找不到类的异常的情况下,我使用Java Decompiler查看了JAR文件jooq-meta-3.2.0.jar,它将显示这些类所在的位置.我看不到org.jooq.util.sqlserver.SQLServerDatabase类的定义.

JOOQ反编译

我正在编译:

java -classpath jooq-3.2.0.jar; jooq-meta-3.2.0.jar; jooq-codegen-3.2.0.jar; sqljdbc4.jar;.org.jooq.util.GenerationTool /myjooqdbconfig.xml

这个org.jooq.util.sqlserver.SQLServerDatabase定义是否存在于任何JAR中?

另外,从上面的配置生成代码后,似乎需要很长时间,并且似乎处于某种循环中.

查看dbo下的生成文件 - Keys/Tables/Dbo,当我将文件复制到Netbeans项目(很多错误)时,我注意到了我的表的重复名称.我删除了重复项,到目前为止很好,我可以在下面的代码中从数据库中读取各种表:

public static void main(String[] args) {
    Connection conn = null;

    String userName = "MYUSER";
    String password = "PWD";
    String url = "jdbc:sqlserver://MYSERVER:1433;DatabaseName=MYDB";

    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
        conn = DriverManager.getConnection(url, userName, password);

        DSLContext create = DSL.using(conn);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(simpleDateFormat.format(new Date( new GregorianCalendar().getTimeInMillis())));
        SelectJoinStep<Record> from = create.select().from(Configuration.CONFIGURATION);
        Result<Record> result = from.fetch();
        System.out.println(simpleDateFormat.format(new Date( new GregorianCalendar().getTimeInMillis())));
        for (Record r : result) {
            Object id =  r.getValue(Configuration.CONFIGURATION.NAME);
            Object time = r.getValue(Configuration.CONFIGURATION.VALUE);
            System.out.println("Record:              : ID: " + id + " Time: " + time);
        }

        System.out.println(simpleDateFormat.format(new Date( new GregorianCalendar().getTimeInMillis())));

    } catch (Exception e) {
        // For the sake of this tutorial, let's keep exception handling simple
        e.printStackTrace();
    } finally {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException ignore) {
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以只是在那个混乱中重申我的问题:

  1. SQL Server特定的类org.jooq.util.sqlserver.SQLServerDatabase在哪里?
  2. 以上信息通常是如何生成SQL Server对象映射的?
  3. 鉴于以上几乎生成正确,并且在Keys/Tables/Dbo .java文件中生成了重复的定义,我不想立即说它是Jooq的错误 - 但可能是错误的数据库设计/错误的配置/傻开发商!

Luk*_*der 7

有了jOOQ 3.2,jOOQ已经成为双重许可.SQL Server集成仅适用于jOOQ Professional Edition许可证.但是,您可以下载适用于SQL Server的30天免费试用版.

请注意,还有一个针对jOOQ 3.2.1(即将发布)的修复,为社区版用户提供更多信息,而不仅仅是堆栈跟踪.

另请参见:jooq-3.2.0和db2数据库