ActivitySummary
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
package com.peakup.tools.testdata;
|
||||
|
||||
import com.peakup.common.dao.PersistableEnum;
|
||||
import com.peakup.common.model.PersistableEnum;
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.ElementCollection;
|
||||
import jakarta.persistence.Transient;
|
||||
@@ -40,16 +40,16 @@ public final class ResultSetMapper {
|
||||
private ResultSetMapper() {
|
||||
}
|
||||
|
||||
public static <T> T map(ResultSet rs, Class<T> clazz) throws Exception {
|
||||
Map<String, Object> columns = buildColumnMap(rs);
|
||||
T instance = newInstance(clazz);
|
||||
public static <T> T map(final ResultSet rs, final Class<T> clazz) throws Exception {
|
||||
final Map<String, Object> columns = buildColumnMap(rs);
|
||||
final T instance = newInstance(clazz);
|
||||
Class<?> cursor = clazz;
|
||||
while (cursor != null && cursor != Object.class) {
|
||||
for (Field field : cursor.getDeclaredFields()) {
|
||||
for (final Field field : cursor.getDeclaredFields()) {
|
||||
if (shouldSkip(field)) {
|
||||
continue;
|
||||
}
|
||||
Object raw = columns.get(resolveColumnName(field));
|
||||
final Object raw = columns.get(resolveColumnName(field));
|
||||
if (raw == null) {
|
||||
continue;
|
||||
}
|
||||
@@ -63,30 +63,30 @@ public final class ResultSetMapper {
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
private static <T> T newInstance(Class<T> clazz) throws Exception {
|
||||
var ctor = clazz.getDeclaredConstructor();
|
||||
private static <T> T newInstance(final Class<T> clazz) throws Exception {
|
||||
final var ctor = clazz.getDeclaredConstructor();
|
||||
ctor.setAccessible(true);
|
||||
return ctor.newInstance();
|
||||
}
|
||||
|
||||
private static Map<String, Object> buildColumnMap(ResultSet rs) throws Exception {
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
int n = meta.getColumnCount();
|
||||
Map<String, Object> map = new HashMap<>(n * 2);
|
||||
private static Map<String, Object> buildColumnMap(final ResultSet rs) throws Exception {
|
||||
final ResultSetMetaData meta = rs.getMetaData();
|
||||
final int n = meta.getColumnCount();
|
||||
final Map<String, Object> map = new HashMap<>(n * 2);
|
||||
for (int i = 1; i <= n; i++) {
|
||||
map.put(meta.getColumnName(i).toLowerCase(), rs.getObject(i));
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
private static boolean shouldSkip(Field field) {
|
||||
private static boolean shouldSkip(final Field field) {
|
||||
return field.isAnnotationPresent(ElementCollection.class)
|
||||
|| field.isAnnotationPresent(Transient.class)
|
||||
|| field.isSynthetic();
|
||||
}
|
||||
|
||||
private static String resolveColumnName(Field field) {
|
||||
Column col = field.getAnnotation(Column.class);
|
||||
private static String resolveColumnName(final Field field) {
|
||||
final Column col = field.getAnnotation(Column.class);
|
||||
if (col != null && !col.name().isEmpty()) {
|
||||
return col.name().toLowerCase();
|
||||
}
|
||||
@@ -94,30 +94,30 @@ public final class ResultSetMapper {
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
private static Object convert(Object raw, Field field) throws Exception {
|
||||
Class<?> type = field.getType();
|
||||
private static Object convert(final Object raw, final Field field) throws Exception {
|
||||
final Class<?> type = field.getType();
|
||||
|
||||
if (type == Instant.class) {
|
||||
return ((Timestamp) raw).toInstant();
|
||||
}
|
||||
if (type.isEnum() && PersistableEnum.class.isAssignableFrom(type)) {
|
||||
int key = ((Number) raw).intValue();
|
||||
final int key = ((Number) raw).intValue();
|
||||
return PersistableEnum.getEnumByKey(key, (PersistableEnum[]) type.getEnumConstants());
|
||||
}
|
||||
if (type == int[].class && raw instanceof Array arr) {
|
||||
Object javaArr = arr.getArray();
|
||||
if (type == int[].class && raw instanceof final Array arr) {
|
||||
final Object javaArr = arr.getArray();
|
||||
if (javaArr instanceof int[]) {
|
||||
return javaArr;
|
||||
}
|
||||
Integer[] boxed = (Integer[]) javaArr;
|
||||
int[] result = new int[boxed.length];
|
||||
final Integer[] boxed = (Integer[]) javaArr;
|
||||
final int[] result = new int[boxed.length];
|
||||
for (int i = 0; i < boxed.length; i++) {
|
||||
result[i] = boxed[i];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
if (type == String[].class && raw instanceof Array arr) {
|
||||
return (String[]) arr.getArray();
|
||||
if (type == String[].class && raw instanceof final Array arr) {
|
||||
return arr.getArray();
|
||||
}
|
||||
if (type == Long.class || type == long.class) {
|
||||
return ((Number) raw).longValue();
|
||||
@@ -137,10 +137,10 @@ public final class ResultSetMapper {
|
||||
return raw;
|
||||
}
|
||||
|
||||
private static String camelToSnake(String name) {
|
||||
StringBuilder sb = new StringBuilder(name.length() + 4);
|
||||
private static String camelToSnake(final String name) {
|
||||
final StringBuilder sb = new StringBuilder(name.length() + 4);
|
||||
for (int i = 0; i < name.length(); i++) {
|
||||
char c = name.charAt(i);
|
||||
final char c = name.charAt(i);
|
||||
if (Character.isUpperCase(c) && i > 0) {
|
||||
sb.append('_');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user