no.digipost.jdbc.Mappers Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of digg Show documentation
Show all versions of digg Show documentation
Some stellar general purpose utils.
/*
* Copyright (C) Posten Norge AS
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package no.digipost.jdbc;
import java.io.InputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.Array;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.time.Instant;
import java.util.Optional;
import static java.util.Optional.empty;
import static java.util.Optional.ofNullable;
/**
* Various predefined mappers used to extract result(s) from a {@link ResultSet}.
*
* @see ColumnMapper
* @see RowMapper
*/
public final class Mappers {
/**
* Gets the value of a given column as a Java {@code boolean}. Unlike the {@link ResultSet#getBoolean(String)},
* this mapper yields {@code null} for SQL {@code NULL}, as the returned value is a boxed {@link java.lang.Boolean}.
* However, for nullable columns, the {@link #getNullableBoolean} mapper should be preferred over this.
*
* @see ResultSet#getBoolean(String)
*/
public static final BasicColumnMapper getBoolean = (name, rs) -> {
boolean value = rs.getBoolean(name);
return rs.wasNull() ? null : value;
};
/** @see ResultSet#getBoolean(String) */
public static final NullableColumnMapper getNullableBoolean = (name, rs) -> {
boolean value = rs.getBoolean(name);
return rs.wasNull() ? empty() : Optional.of(value);
};
/**
* Gets the value of a given column as a Java {@code byte}. Unlike the {@link ResultSet#getByte(String)},
* this mapper yields {@code null} for SQL {@code NULL}, as the returned value is a boxed {@link java.lang.Byte}.
* However, for nullable columns, the {@link #getNullableByte} mapper should be preferred over this.
*
* @see ResultSet#getByte(String)
*/
public static final BasicColumnMapper getByte = (name, rs) -> {
byte value = rs.getByte(name);
return rs.wasNull() ? null : value;
};
/** @see ResultSet#getByte(String) */
public static final NullableColumnMapper getNullableByte = (name, rs) -> {
byte value = rs.getByte(name);
return rs.wasNull() ? empty() : Optional.of(value);
};
/**
* Gets the value of a given column as a Java {@code short}. Unlike the {@link ResultSet#getShort(String)},
* this mapper yields {@code null} for SQL {@code NULL}, as the returned value is a boxed {@link java.lang.Short}.
* However, for nullable columns, the {@link #getNullableShort} mapper should be preferred over this.
*
* @see ResultSet#getShort(String)
*/
public static final BasicColumnMapper getShort = (name, rs) -> {
short value = rs.getShort(name);
return rs.wasNull() ? null : value;
};
/** @see ResultSet#getShort(String) */
public static final NullableColumnMapper getNullableShort = (name, rs) -> {
short value = rs.getShort(name);
return rs.wasNull() ? empty() : Optional.of(value);
};
/**
* Gets the value of a given column as a Java {@code int}. Unlike the {@link ResultSet#getInt(String)},
* this mapper yields {@code null} for SQL {@code NULL}, as the returned value is a boxed {@link java.lang.Integer}.
* However, for nullable columns, the {@link #getNullableInt} mapper should be preferred over this.
*
* @see ResultSet#getInt(String)
*/
public static final BasicColumnMapper getInt = (name, rs) -> {
int value = rs.getInt(name);
return rs.wasNull() ? null : value;
};
/** @see ResultSet#getInt(String) */
public static final NullableColumnMapper getNullableInt = (name, rs) -> {
int value = rs.getInt(name);
return rs.wasNull() ? empty() : Optional.of(value);
};
/**
* Gets the value of a given column as a Java {@code long}. Unlike the {@link ResultSet#getLong(String)},
* this mapper yields {@code null} for SQL {@code NULL}, as the returned value is a boxed {@link java.lang.Long}.
* However, for nullable columns, the {@link #getNullableLong} mapper should be preferred over this.
*
* @see ResultSet#getLong(String)
*/
public static final BasicColumnMapper getLong = (name, rs) -> {
long value = rs.getLong(name);
return rs.wasNull() ? null : value;
};
/** @see ResultSet#getLong(String) */
public static final NullableColumnMapper getNullableLong = (name, rs) -> {
long value = rs.getLong(name);
return rs.wasNull() ? empty() : Optional.of(value);
};
/**
* Gets the value of a given column as a Java {@code float}. Unlike the {@link ResultSet#getFloat(String)},
* this mapper yields {@code null} for SQL {@code NULL}, as the returned value is a boxed {@link java.lang.Float}.
* However, for nullable columns, the {@link #getNullableFloat} mapper should be preferred over this.
*
* @see ResultSet#getFloat(String)
*/
public static final BasicColumnMapper getFloat = (name, rs) -> {
float value = rs.getFloat(name);
return rs.wasNull() ? null : value;
};
/** @see ResultSet#getFloat(String) */
public static final NullableColumnMapper getNullableFloat = (name, rs) -> {
float value = rs.getFloat(name);
return rs.wasNull() ? empty() : Optional.of(value);
};
/**
* Gets the value of a given column as a Java {@code double}. Unlike the {@link ResultSet#getDouble(String)},
* this mapper yields {@code null} for SQL {@code NULL}, as the returned value is a boxed {@link java.lang.Double}.
* However, for nullable columns, the {@link #getNullableDouble} mapper should be preferred over this.
*
* @see ResultSet#getDouble(String)
*/
public static final BasicColumnMapper getDouble = (name, rs) -> {
double value = rs.getDouble(name);
return rs.wasNull() ? null : value;
};
/** @see ResultSet#getDouble(String) */
public static final NullableColumnMapper getNullableDouble = (name, rs) -> {
double value = rs.getDouble(name);
return rs.wasNull() ? empty() : Optional.of(value);
};
/** @see ResultSet#getBigDecimal(String) */
public static final BasicColumnMapper getBigDecimal = (name, rs) -> rs.getBigDecimal(name);
/** @see ResultSet#getBigDecimal(String) */
public static final NullableColumnMapper getNullableBigDecimal = (name, rs) -> ofNullable(rs.getBigDecimal(name));
/** @see ResultSet#getBytes(String) */
public static final BasicColumnMapper getBytes = (name, rs) -> rs.getBytes(name);
/** @see ResultSet#getBytes(String) */
public static final NullableColumnMapper getNullableBytes = (name, rs) -> ofNullable(rs.getBytes(name));
/** @see ResultSet#getString(String) */
public static final BasicColumnMapper getString = (name, rs) -> rs.getString(name);
/** @see ResultSet#getString(String) */
public static final NullableColumnMapper getNullableString = (name, rs) -> ofNullable(rs.getString(name));
/** @see ResultSet#getURL(String) */
public static final BasicColumnMapper getURL = (name, rs) -> rs.getURL(name);
/** @see ResultSet#getURL(String) */
public static final NullableColumnMapper getNullableURL = (name, rs) -> ofNullable(rs.getURL(name));
/** @see ResultSet#getDate(String) */
public static final BasicColumnMapper getDate = (name, rs) -> rs.getDate(name);
/** @see ResultSet#getDate(String) */
public static final NullableColumnMapper getNullableDate = (name, rs) -> ofNullable(rs.getDate(name));
/** @see ResultSet#getTimestamp(String) */
public static final BasicColumnMapper getTimestamp = (name, rs) -> rs.getTimestamp(name);
/** @see ResultSet#getTimestamp(String) */
public static final NullableColumnMapper getNullableTimestamp = (name, rs) -> ofNullable(rs.getTimestamp(name));
/**
* Combination of {@link #getTimestamp} and a conversion to an {@link Instant} using {@link Timestamp#toInstant()}.
*/
public static final BasicColumnMapper getInstant = getTimestamp.andThen(Timestamp::toInstant);
/**
* Combination of {@link #getNullableTimestamp} and a conversion to an {@link Instant}
* using {@link Timestamp#toInstant()}.
*/
public static final NullableColumnMapper getNullableInstant = getNullableTimestamp.andThen(Timestamp::toInstant);
/** @see ResultSet#getAsciiStream(String) */
public static final BasicColumnMapper getAsciiStream = (name, rs) -> rs.getAsciiStream(name);
/** @see ResultSet#getAsciiStream(String) */
public static final NullableColumnMapper getNullableAsciiStream = (name, rs) -> ofNullable(rs.getAsciiStream(name));
/** @see ResultSet#getBinaryStream(String) */
public static final BasicColumnMapper getBinaryStream = (name, rs) -> rs.getBinaryStream(name);
/** @see ResultSet#getBinaryStream(String) */
public static final NullableColumnMapper getNullableBinaryStream = (name, rs) -> ofNullable(rs.getBinaryStream(name));
/** @see ResultSet#getCharacterStream(String) */
public static final BasicColumnMapper getCharacterStream = (name, rs) -> rs.getCharacterStream(name);
/** @see ResultSet#getCharacterStream(String) */
public static final NullableColumnMapper getNullableCharacterStream = (name, rs) -> ofNullable(rs.getCharacterStream(name));
/** @see ResultSet#getArray(String) */
public static final BasicColumnMapper getSqlArray = (name, rs) -> rs.getArray(name);
/**
* Gets the value of a given SQL {@code ARRAY} column as an uncasted Java array object. The result should be casted to
* the applicable specific array type.
*
* @see #getStringArray
* @see #getIntArray
* @see #getLongArray
*/
public static final BasicColumnMapper