All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.icuter.jsql.orm.ORMapper Maven / Gradle / Ivy

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