Я большой поклонник ORM, особенно когда речь заходит о .NET с Entity Framework и использовании LINQ делает доступ к данным менее утомительным и приятным.JOOQ с SQL Server
Однако я сейчас работаю над Java и особенно смотрю на ORM. Я пробовал nHybernate против нашей базы данных SQL Server - и с отсутствием ключей (уникальных ограничений) на некоторых таблицах я начал смотреть на JOOQ.
Однако мне удалось сгенерировать мои классы Java из базы данных SQL Server - без ошибок - с помощью 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>
С класса не найден исключения я имел возможность заглянуть в JAR файл jooq-мета-3.2.0.jar с помощью Java Decompiler, где он появятся эти классы. Я не вижу определения класса org.jooq.util.sqlserver.SQLServerDatabase.
Я компиляции с:
Java -classpath jooq-3.2.0.jar; jooq-мета-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) {
}
}
}
}
Так просто повторить мои вопросы среди этой неразберихи:
- Где SQL Серверный класс org.jooq.util.sqlserver.SQLServerDatabase?
- Является ли приведенная выше информация о том, как вы обычно генерируете сопоставления объектов SQL Server?
- Учитывая, что приведенное выше почти сгенерировано правильно и что существуют дубликаты определений, сгенерированных в файлах Keys/Tables/Dbo .java, я не хочу сразу сказать, что это ошибка с Jooq, но может быть плохой дизайн базы данных/неправильная конфигурация/глупый разработчик!
Спасибо за информацию Lukas – Andez