java-convert-localdate-sql-date
LocalDateとSQL Dateの間の変換
1. 概要
このクイックチュートリアルでは、* _java.time.LocalDate_と_java.sql.Date_ *の間の変換方法を学習します。
2. 直接変換
-
_LocalDate_から_java.sql.Date_への変換には、単に_valueOf()_メソッドを使用できます* _ * java.sql.Date * ._同様に、現在の日付を変換するには、次を使用できます。
Date date = Date.valueOf(LocalDate.now());
または、他の特定の日付:
Date date = Date.valueOf(LocalDate.of(2019, 01, 10));
さらに、引数__null_の場合、_valueOf()_は_NullPointerException_をスローします。
それでは、__ java.sql.Date ___から_LocalDate_に変換しましょう。 そのために、_toLocalDate()_メソッドを使用できます。
LocalDate localDate = Date.valueOf("2019-01-10").toLocalDate();
*3. AttributeConverter *の使用
まず、問題を理解しましょう。
Java 8には、https://www.baeldung.com/java-8-date-time-intro [Date / Time API]など、多くの便利な機能があります。
ただし、一部のデータベースまたは永続フレームワークで使用するには、予想よりも少し多くの作業が必要です。 たとえば、JPAは_LocalDate_プロパティを_java.sql.Date_オブジェクトではなくblobにマップします。 その結果、データベースは_LocalDate_プロパティを_Date_型として認識しません。
一般に、_LocalDate_と_Date_の間で明示的な変換を実行することは望ましくありません。
たとえば、_LocalDate_フィールドを持つエンティティオブジェクトがあるとします。 このエンティティを永続化するときは、** _ LocalDate_を** __ * java.sql.Date * .__にマッピングする方法を永続化コンテキストに伝える必要があります
link:/jpa-attribute-converters[_AttributeConverter_]クラスを作成して、簡単なソリューションを適用しましょう。
@Converter(autoApply = true)
public class LocalDateConverter implements AttributeConverter<LocalDate, Date> {
@Override
public Date convertToDatabaseColumn(LocalDate localDate) {
return Optional.ofNullable(localDate)
.map(Date::valueOf)
.orElse(null);
}
@Override
public LocalDate convertToEntityAttribute(Date date) {
return Optional.ofNullable(date)
.map(Date::toLocalDate)
.orElse(null);
}
}
ご覧のとおり、_AttributeConverter_インターフェイスは2つのタイプを受け入れます。この場合、_LocalDate_と_Date_です。
つまり、_convertToDatabaseColumn()_および_convertToEntityAttribute()_メソッドが変換プロセスを処理します。 実装の内部では、link:/java-optional[_Optional_]を使用して、可能な参照_null_参照を簡単に処理します。
さらに、_ @ Converter_アノテーションも使用しています。 * _autoApply = true_ propertyを使用すると、エンティティタイプのマッピングされたすべての属性にコンバーターが適用されます。*
4. 結論
このクイックチュートリアルでは、_java.time.LocalDate_と_java.sql.Date._の間で変換する2つの方法を示しました。さらに、直接変換とcustom examples_AttributeConverter_クラスを使用した例を示しました。
いつものように、この記事の完全なコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/java-jpa [GitHub]にあります。