
top.zeimao77.product.sql.DefaultResultSetResolve Maven / Gradle / Ivy
package top.zeimao77.product.sql;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import top.zeimao77.product.exception.BaseServiceRunException;
import static top.zeimao77.product.exception.ExceptionCodeDefinition.*;
import top.zeimao77.product.json.Ijson;
import top.zeimao77.product.model.Orderd;
import top.zeimao77.product.util.CalendarDateUtil;
import top.zeimao77.product.util.LocalDateTimeUtil;
import top.zeimao77.product.util.StringOptional;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.sql.*;
import java.time.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* ResultSet结果集解析器
*/
public class DefaultResultSetResolve implements ResultSetResolve {
private static Logger logger = LoggerFactory.getLogger(DefaultResultSetResolve.class);
public static final DefaultResultSetResolve INSTANCE = new DefaultResultSetResolve();
private List resovers;
private boolean sorted;
public boolean addFieldTypeResover(FiledTypeResover filedTypeResover) {
this.sorted = false;
return this.resovers.add(filedTypeResover);
}
public DefaultResultSetResolve() {
resovers = new ArrayList<>(32);
resovers.add(new FiledTypeResover() {
@Override
public String resove(Object obj) {
return obj == null ? null : obj.toString();
}
@Override
public int orderd() {
return 1000;
}
});
resovers.add(new FiledTypeResover() {
@Override
public Long resove(Object obj) {
if(obj == null)
return null;
if(obj instanceof Integer o) {
return o.longValue();
}
if(obj instanceof Long o) {
return o;
}
if(obj instanceof Timestamp o) {
return o.getTime();
}
if(obj instanceof LocalDateTime o) {
return o.toEpochSecond(ZoneId.systemDefault().getRules().getOffset(Instant.now()));
}
return Long.valueOf(obj.toString());
}
@Override
public int orderd() {
return 1100;
}
});
resovers.add(new FiledTypeResover() {
@Override
public Integer resove(Object obj) {
if(obj == null)
return null;
if(obj instanceof Integer o) {
return o;
}
if(obj instanceof Long o) {
return o.intValue();
}
return Integer.valueOf(obj.toString());
}
@Override
public int orderd() {
return 1200;
}
});
resovers.add(new FiledTypeResover() {
@Override
public Double resove(Object obj) {
if(obj == null)
return null;
if(obj instanceof Number o)
return o.doubleValue();
return Double.valueOf(obj.toString());
}
@Override
public int orderd() {
return 1300;
}
});
resovers.add(new FiledTypeResover() {
@Override
public BigDecimal resove(Object obj) {
if( obj == null )
return null;
if(obj instanceof BigDecimal o)
return o;
if(obj instanceof Number o)
return BigDecimal.valueOf(o.doubleValue());
return new BigDecimal(obj.toString());
}
@Override
public int orderd() {
return 1400;
}
});
resovers.add(new FiledTypeResover() {
@Override
public Boolean resove(Object obj) {
if( obj == null )
return null;
if(obj instanceof Boolean o)
return o;
if(obj instanceof Number o)
return o.intValue() == 0 ? false : true;
if(obj instanceof String o)
return Boolean.valueOf(o);
logger.error("无法解析的布尔值:{}",obj);
return null;
}
@Override
public int orderd() {
return 1500;
}
});
resovers.add(new FiledTypeResover() {
@Override
public java.util.Date resove(Object obj) {
if(obj == null)
return null;
if(obj instanceof LocalDateTime o)
return CalendarDateUtil.fromLocalDateTime(o);
if(obj instanceof Time o)
return new Date(o.getTime());
if(obj instanceof Date o)
return new Date(o.getTime());
if(obj instanceof Timestamp o)
return new Date(o.getTime());
if(obj instanceof Long o) {
return Date.from(Instant.ofEpochMilli(o));
}
if(obj instanceof String o)
return CalendarDateUtil.parseDateTime(o);
logger.error("无法解析的日期时间:{}",obj);
return null;
}
@Override
public int orderd() {
return 1600;
}
});
resovers.add(new FiledTypeResover() {
@Override
public LocalDateTime resove(Object obj) {
if(obj == null) return null;
if(obj instanceof LocalDateTime o)
return o;
if(obj instanceof LocalDate o) {
return LocalDateTime.of(o,LocalTime.MIN);
}
if(obj instanceof Timestamp o)
return LocalDateTime.ofInstant(Instant.ofEpochMilli(o.getTime()), ZoneId.systemDefault());
if(obj instanceof Long o) {
return LocalDateTime.ofInstant(Instant.ofEpochMilli(o),ZoneId.systemDefault());
}
if(obj instanceof String o)
return LocalDateTime.parse(o,LocalDateTimeUtil.STANDARDDATETIMEFORMATTER);
logger.error("无法解析的日期时间:{}",obj);
return null;
}
@Override
public int orderd() {
return 1700;
}
});
resovers.add(new FiledTypeResover() {
@Override
public LocalTime resove(Object obj) {
if(obj == null) return null;
if(obj instanceof LocalTime o)
return o;
if(obj instanceof Time o)
return o.toLocalTime();
if(obj instanceof String o)
return LocalTime.parse(o,LocalDateTimeUtil.STANDARDTIMEFORMATTER);
logger.error("无法解析的时间:{}",obj);
return null;
}
@Override
public int orderd() {
return 1800;
}
});
resovers.add(new FiledTypeResover() {
@Override
public LocalDate resove(Object obj) {
if(obj == null) return null;
if(obj instanceof LocalDate o)
return o;
if(obj instanceof Date o)
return o.toLocalDate();
if(obj instanceof String o)
return LocalDate.parse(o,LocalDateTimeUtil.STANDARDDATEFORMATTER);
logger.error("无法解析的日期:{}",obj);
return null;
}
@Override
public int orderd() {
return 1900;
}
});
resovers.add(new FiledTypeResover() {
@Override
public Float resove(Object obj) {
if(obj == null)
return null;
if(obj instanceof Float o)
return o;
if(obj instanceof Number o)
return o.floatValue();
return Float.valueOf(obj.toString());
}
@Override
public int orderd() {
return 2000;
}
});
resovers.add(new FiledTypeResover() {
@Override
public Short resove(Object obj) {
if(obj == null)
return null;
if(obj instanceof Short o)
return o;
if(obj instanceof Number o)
return o.shortValue();
return Short.valueOf(obj.toString());
}
@Override
public int orderd() {
return 2100;
}
});
resovers.add(new FiledTypeResover() {
@Override
public Character resove(Object obj) {
return obj == null ? null : Character.valueOf(obj.toString().charAt(0));
}
@Override
public int orderd() {
return 2200;
}
});
resovers.add(new FiledTypeResover() {
@Override
public BigInteger resove(Object obj) {
if(obj instanceof BigInteger o)
return o;
if(obj instanceof Number o) {
return BigInteger.valueOf(o.longValue());
}
return obj == null ? null : new BigInteger(obj.toString());
}
@Override
public int orderd() {
return 2300;
}
});
resovers.add(new FiledTypeResover() {
@Override
public ByteBuffer resove(Object obj) {
if(obj == null) return null;
if(obj.getClass().isArray() && obj.getClass().getComponentType() == byte.class) {
return ByteBuffer.wrap((byte[])obj);
}
return null;
}
@Override
public int orderd() {
return 2400;
}
});
resovers.add(new FiledTypeResover() {
@Override
public StringOptional resove(Object obj) {
if(obj == null) return StringOptional.empty();
return new StringOptional(obj.toString());
}
@Override
public int orderd() {
return 2500;
}
});
resovers.add(new FiledTypeResover() {
@Override
public Ijson resove(Object obj) {
return Ijson.parse(obj.toString());
}
@Override
public int orderd() {
return 2600;
}
});
resovers.add(new FiledTypeResover
© 2015 - 2025 Weber Informatics LLC | Privacy Policy