Преобразование записи JOOQ в POJO с помощью конвертера - PullRequest
0 голосов
/ 26 октября 2018

В моей базе данных Oracle есть значения сумм, которые хранятся как VARCHAR. При извлечении записей из базы данных я хочу сопоставить их с POJO, в котором значения сумм представлены как двойные. К сожалению, я не могу использовать принудительные типы, так как в базе данных все хранится как VARCHAR, и нет шаблона, который идентифицирует столбец как столбец, содержащий значение суммы.

Я смотрел на jOOQ конвертеры , которые, кажется, то, что я хочу. Поэтому я создал конвертер jOOQ для этой цели:

public class DoubleConverter implements Converter<String, Double> {

    @Override
    public Double from(String stringValue) {
        return new Double(stringValue);
    }

    @Override
    public String to(Double doubleValue) {
        DecimalFormat df = new DecimalFormat();
        df.setMinimumFractionDigits(0);
        df.setGroupingUsed(false);

        return df.format(doubleValue);
    }

    @Override
    public Class<String> fromType() {
        return String.class;
    }

    @Override
    public Class<Double> toType() {
        return Double.class;
    }

}

Однако я хочу запускать этот конвертер всякий раз, когда я хочу сопоставить запись базы данных с моим POJO, используя record.into(MyClass.class), а затем запускать обратно всякий раз, когда я записываю обратно в базу данных. Как вы рекомендуете достичь этого, пожалуйста?

1 Ответ

0 голосов
/ 26 октября 2018

Хотя я настоятельно рекомендую вам как-нибудь получить список всех двойных столбцов и применить конфигурацию принудительного типа в конфигурации генерации кода, в вашем конкретном случае вам не нужно много делать для того, чтобы иметь возможность вызвать record.into(MyClass.class).

Ваш record будет содержать только String значений, а ваш MyClass класс будет содержать соответствующие double атрибуты. jOOQ автоматически преобразует из String в double и наоборот. По умолчанию применяются DefaultRecordMapper и DefaultRecordUnmapper.

Вы можете переопределить их, указав новые RecordMapperProvider и RecordUnmapperProvider, как описано здесь: https://www.jooq.org/doc/latest/manual/sql-execution/fetching/pojos-with-recordmapper-provider

Это будет немного работы, чтобы сделать это правильно.

...