1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.util;
17
18 import java.util.Objects;
19 import java.util.Optional;
20 import java.util.function.Supplier;
21
22 import org.jspecify.annotations.Nullable;
23 import org.mybatis.dynamic.sql.SqlColumn;
24
25 public class ValueOrNullMapping<T> extends AbstractColumnMapping {
26
27 private final Supplier<@Nullable T> valueSupplier;
28
29 private final SqlColumn<T> localColumn;
30
31 private ValueOrNullMapping(SqlColumn<T> column, Supplier<@Nullable T> valueSupplier) {
32 super(column);
33 this.valueSupplier = Objects.requireNonNull(valueSupplier);
34 localColumn = Objects.requireNonNull(column);
35 }
36
37 public Optional<Object> value() {
38 return Optional.ofNullable(localColumn.convertParameterType(valueSupplier.get()));
39 }
40
41 @Override
42 public <R> R accept(ColumnMappingVisitor<R> visitor) {
43 return visitor.visit(this);
44 }
45
46 public static <T> ValueOrNullMapping<T> of(SqlColumn<T> column, Supplier<@Nullable T> valueSupplier) {
47 return new ValueOrNullMapping<>(column, valueSupplier);
48 }
49 }