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

com.github.youyinnn.youdbutils.dao.model.ModelResultFactory Maven / Gradle / Ivy

package com.github.youyinnn.youdbutils.dao.model;


import com.github.youyinnn.youdbutils.exceptions.ModelResultTransferException;
import com.github.youyinnn.youdbutils.utils.ReflectionUtils;

import java.sql.ResultSet;
import java.util.ArrayList;

/**
 * 处理ResultSet为Model类组成的List.
 *
 * @author youyinnn
 */
public class ModelResultFactory {

    private Class modelClass;

    private ArrayList fieldList;

    private FieldMapping fieldMapping;

    public ModelResultFactory(Class modelClass) {
        this.modelClass = modelClass;
        this.fieldList = ModelTableMessage.getModelFieldList(modelClass.getSimpleName());
        this.fieldMapping = ModelTableMessage.getFieldMapping(modelClass.getSimpleName());
    }

    public ArrayList getResultModelList(ResultSet resultSet) {
        ArrayList resultModelList = new ArrayList<>();
        try {
            while (resultSet.next()) {
                T instance = getResultModel(resultSet);
                resultModelList.add(instance);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultModelList;
    }


    public T getResultModel(ResultSet resultSet) {

        T instance = null;
        try {
            if (fieldList == null | fieldMapping == null) {
                throw new ModelResultTransferException("Model:["+modelClass.getSimpleName()+"] " +
                        "没有在ModelTableMessage中注册。");
            }
            instance = modelClass.newInstance();
            for (String field : fieldList) {
                boolean rsHasThisField = true;
                try {
                    resultSet.findColumn(field);
                } catch (Exception ignore) {
                    rsHasThisField = false;
                }
                if (rsHasThisField) {
                    Object value;
                    if (fieldMapping.needToReplace(field)) {
                        value = resultSet.getObject(fieldMapping.getTableField(field));
                    } else {
                        value = resultSet.getObject(field);
                    }
                    ReflectionUtils.setFieldValue(instance,field,value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return instance;
    }

    @Override
    public String toString() {
        return "ModelResultFactory{" +
                "modelClass=" + modelClass +
                ", fieldList=" + fieldList +
                ", fieldMapping=" + fieldMapping +
                '}';
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy