Сопоставить SQL (не JPQL) с набором простых объектов Java? - PullRequest
1 голос
/ 14 октября 2011

Не могу поверить, что спрашиваю, но ...

Есть ли в Java способ выполнить инструкцию SQL (не JPQL) и сопоставить результаты с List простых старых объектов Java?

Я хочу иметь возможность создавать небольшие легкие объекты POJO, а затем заполнять их необработанными SQL-запросами. Я явно НЕ ищу создание сложных объектов: просто примитивы, без отношений.

Кажется, все сосредоточено вокруг JPA / JPQL, но проблема в том, что я не хочу связывать свои объекты с определенной таблицей.

Я чувствую, что я тоже:

  • (а) на сумасшедших таблетках или
  • (б) упущено что-то фундаментальное

Ответы [ 3 ]

3 голосов
/ 14 октября 2011

Легкий картограф недоступен как часть самого JDK.Вы можете либо свернуть свой собственный простой преобразователь, используя стандартный Java JDBC API (на самом деле, на этом основаны реализации JPA), либо взглянуть на внешние библиотеки, которые предоставляют простые преобразователи SQL-to-Object,Я знаю MyBatis (ранее известный как iBatis).

A) Нет, я думаю, что вы не принимаете сумасшедшие таблетки и Б) возможно ли, что вы только что пропустили JDBC?

2 голосов
/ 14 октября 2011

Сормула может делать то, что вы хотите.Вам нужно будет расширить Table и переопределить getTableName () и / или getQualifiedTableName (), чтобы предоставить желаемое имя таблицы, поскольку sormula обычно связывает один POJO с одной таблицей.См. пример 2a и пример 3a .

0 голосов
/ 02 августа 2013

jOOQ имеет несколько возможностей отображения Record -> POJO, которые, вероятно, сделают эту работу за вас (хотя jOOQ может сделать гораздо больше). Вот пример:

// A "mutable" POJO class
public class MyBook1 {
  public int id;
  public String title;
}

// The various "into()" methods allow for fetching records into your POJOs:
List<MyBook1> myBooks = create.select().from(BOOK).fetchInto(MyBook1.class);

Взято из руководства здесь: http://www.jooq.org/doc/latest/manual/sql-execution/fetching/pojos/

Алгоритм отображения описан в Javadoc: http://www.jooq.org/javadoc/latest/org/jooq/impl/DefaultRecordMapper.html

Хотя в приведенном выше примере используется DSL API jOOQ, вы можете использовать и простой SQL:

List<MyBook1> myBooks = create.resultQuery("SELECT * FROM BOOK")
                              .fetchInto(MyBook1.class);

Вы даже можете работать с JDBC ResultSet, используя jOOQ только для отображения:

ResultSet rs = stmt.executeQuery();
List<MyBook1> myBooks = create.fetch(rs).into(MyBook1.class);
...