2013-11-01 97 views
3

我ORM的大風扇特別是當它與實體框架.NET和使用LINQ使您的數據訪問不那麼單調乏味,更愉快。JOOQ與SQL Server

不過,我目前正在研究Java,特別是看ORM。我已經嘗試了nHybernate來對付我們的SQL Server數據庫 - 並且在某些表上沒有鍵(唯一約束)時,我開始考慮JOOQ。

我已經成功不過來從SQL Server數據庫中我的Java類 - 不是沒有錯誤 - 使用JOOQ(V3.2.0)。

根據這一頁JOOQ Connections它提到一個類org.jooq.util.sqlserver.SQLServerDatabase。但是,當我在配置中生成這個,我得到了類沒有發現異常,並沒有生成任何東西。我不得不使用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> 

使用Java反編譯它的類未發現異常,我在JAR文件jooq-元3.2.0.jar偷看會出現這些類所在的位置。我看不到org.jooq.util.sqlserver.SQLServerDatabase類的定義。

JOOQ Decompile

我與編譯:; jooq-元3.2.0.jar;

的java -classpath jooq-3.2.0.jar jooq-CODEGEN-3.2.0.jar; sqljdbc4 。罐;。 org.jooq.util.GenerationTool /myjooqdbconfig.xml

這個org.jooq.util.sqlserver.SQLServerDatabase定義是否存在於任何JAR中?

此外,具有生成從上述結構的代碼,它似乎需要很長的時間,似乎是在一些循環。

展望生成的文件下DBO - 鍵/表/ 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) { 
      } 
     } 
    } 
} 

所以只是重申我的問題,其中包括那件事情:

  1. 在哪裏SQL服務器特定的類org.jooq.util.sqlserver.SQLServerDatabase?
  2. 以上信息通常是如何生成SQL Server對象映射的?
  3. 鑑於上述幾乎正確生成,並有在密鑰產生重複定義/表/ DBO .java文件,我不想馬上說這是Jooq錯誤 - 但可能是壞的數據庫設計/錯誤的配置/愚蠢的開發者!

回答

1

我想分享的SQL Server 2012和2014年,這兩個做了很多嘗試後工作,我的工作配置。 我下載了jooq3.7.2企業版,使其工作。

這裏是我的示例配置文件 「library.xml」

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.7.0.xsd"> 
    <!-- Configure the database connection here --> 
    <jdbc> 
    <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver> 
    <url>jdbc:sqlserver://testdelta1:1433;databaseName=NEO_DB</url> 
    <user>LOB_ManilaUsers</user> 
    <password>lobpassword3123</password> 
    </jdbc> 

    <generator> 
    <!-- The default code generator. You can override this one, to generate your own code style. 
     Supported generators: 
     - org.jooq.util.JavaGenerator 
     - org.jooq.util.ScalaGenerator 
     Defaults to org.jooq.util.JavaGenerator --> 
    <name>org.jooq.util.JavaGenerator</name> 

    <database> 
     <!-- The database type. The format here is: 
      org.util.[database].[database]Database --> 
     <!--<name>org.jooq.util.mysql.MySQLDatabase</name> --> 
     <name>org.jooq.util.sqlserver.SQLServerDatabase</name> 
     <!-- The database schema (or in the absence of schema support, in your RDBMS this 
      can be the owner, user, database name) to be generated --> 

     <!-- specify database name --> 
     <inputSchema>dbo</inputSchema> 

     <!-- All elements that are generated from your schema 
      (A Java regular expression. Use the pipe to separate several expressions) 
      Watch out for case-sensitivity. Depending on your database, this might be important! --> 
     <includes>.*</includes> 

     <!-- All elements that are excluded from your schema 
      (A Java regular expression. Use the pipe to separate several expressions). 
      Excludes match before includes --> 
     <excludes></excludes> 
    </database> 

    <target> 
     <!-- The destination package of your generated classes (within the destination directory) --> 
     <packageName>com.neoapi.entity</packageName> 

     <!-- The destination directory of your generated classes --> 
     <directory>jooq_directory/src_generated</directory> 
    </target> 
    </generator> 
</configuration> 

通常默認模式值爲 'DBO'。起初,我輸入了'NEO_DB',這沒有奏效。

可以指定你想要的和

免費版或開源jooq 3.7.2不包含數據庫名稱SQLServerDatabase。企業版(30天試用版)的作品。我不確定試用日期是如何開始計算的。

這裏是從我的終端樣品日誌:

> INFO: Generating table   : Tobservationrawdataobservations.java [input=tObservationRawDataObservations, output=tObservationRawDataObservations, pk=PK_ObservationRawDataObservations] 
Feb 16, 2016 7:03:35 AM org.jooq.tools.JooqLogger info 

INFO: Generating table   : UdvPublisheddata.java [input=udv_PublishedData, output=udv_PublishedData, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table   : UdvPublishinghistory.java [input=udv_PublishingHistory, output=udv_PublishingHistory, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table   : UdvScreamertanksystems.java [input=udv_ScreamerTankSystems, output=udv_ScreamerTankSystems, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table   : UdvSiradwmconfig.java [input=udv_SiraDWMConfig, output=udv_SiraDWMConfig, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table   : Vwauditlog.java [input=vwAuditLog, output=vwAuditLog, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table   : Vwcompanysitetanksystem.java [input=vwCompanySiteTankSystem, output=vwCompanySiteTankSystem, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table   : Vwdocketdeliveries.java [input=vwDocketDeliveries, output=vwDocketDeliveries, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Tables generated   : Total: 01:06 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table references 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Table refs generated  : Total: 01:06, +17.847ms 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating Keys   
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Keys generated   : Total: 01:06, +49.833ms 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table records 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : _Tmptsis_20151019Record.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : DataRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : FuncgetchasedatatableRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : FuncgetcompliancestatisticspasstableRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : FuncgetcurrentfailsinctableRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcalibrationsRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcompaniesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcompanyfilereadersRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcompanyrolecontactsRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcompanyrolepermissionsRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcompanyrolesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcontactregionsRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcontactsRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcontactsitesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcorrectiongroupRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcorrectiongroupsiteRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TdomainusersRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TfilereadersRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TgradealiasesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TgradesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TimportedfilemessagesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TimportedfilesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating routine  : SpCreatediagram.java 
Feb 16, 2016 7:03:43 AM org.jooq.tools.JooqLogger info 
INFO: Generating routine  : SpDropdiagram.java 
Feb 16, 2016 7:03:45 AM org.jooq.tools.JooqLogger info 
INFO: Generating routine  : SpHelpdiagramdefinition.java 
Feb 16, 2016 7:03:45 AM org.jooq.tools.JooqLogger info 
INFO: Generating routine  : SpHelpdiagrams.java 
Feb 16, 2016 7:03:46 AM org.jooq.tools.JooqLogger info 
INFO: Generating routine  : SpRenamediagram.java 
Feb 16, 2016 7:03:46 AM org.jooq.tools.JooqLogger info 
INFO: Routines generated  : Total: 01:11, +5.132s 
Feb 16, 2016 7:03:46 AM org.jooq.tools.JooqLogger info 
INFO: Packages fetched   : 0 (0 included, 0 excluded) 
Feb 16, 2016 7:03:46 AM org.jooq.tools.JooqLogger info 
INFO: Removing excess files  
Feb 16, 2016 7:03:46 AM org.jooq.tools.JooqLogger info 
INFO: GENERATION FINISHED: dbo : Total: 01:11, +2.713ms