
cn.icuter.jsql.orm.ORMapper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jsql-jdk1.6 Show documentation
Show all versions of jsql-jdk1.6 Show documentation
JDBC framework for writing sql like java programing
The newest version!
package cn.icuter.jsql.orm;
import cn.icuter.jsql.ColumnName;
import cn.icuter.jsql.builder.FieldInterceptor;
import cn.icuter.jsql.exception.ORMException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author edward
* @since 2018-08-26
*/
public class ORMapper {
private T object;
public ORMapper(T object) {
this.object = object;
}
public static ORMapper of(E object) {
return new ORMapper(object);
}
public Map toMapIgnoreNullValue() {
return toMap(new FieldInterceptor() {
@Override
public boolean accept(T object, Field field, String colName, Object value, Map resultMap) {
return value != null;
}
});
}
public Map toMap() {
return toMap(new FieldInterceptor() {
@Override
public boolean accept(T object, Field field, String colName, Object value, Map resultMap) {
return true;
}
});
}
public Map toMap(final FieldInterceptor interceptor) {
final Map resultMap = new LinkedHashMap();
ORMapper.mapColumn(object.getClass(), new DBColumnMapper() {
@Override
public void map(String col, Field field) {
try {
field.setAccessible(true);
Object v = field.get(object);
if (interceptor.accept(object, field, col, v, resultMap)) {
resultMap.put(col, v);
}
} catch (IllegalAccessException e) {
throw new ORMException("mapping field and column error for col: " + col + " and filed: " + field.getName(), e);
}
}
});
return resultMap;
}
public static void mapColumn(Class> clazz, DBColumnMapper dbColumnMapper) {
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
if (field.getName().startsWith("this$")) {
continue;
}
String fieldName = null;
if (field.isEnumConstant() || (field.getModifiers() & Modifier.TRANSIENT) != 0) {
continue;
}
ColumnName fieldAnnotation = field.getAnnotation(ColumnName.class);
if (fieldAnnotation != null && fieldAnnotation.ignore()) {
continue;
}
if (fieldAnnotation != null && fieldAnnotation.value().length() > 0) {
fieldName = fieldAnnotation.value();
}
if (fieldName == null || fieldName.length() <= 0) {
fieldName = field.getName();
}
dbColumnMapper.map(fieldName, field);
}
}
public interface DBColumnMapper {
void map(String column, Field field);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy