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

com.envision.sql.SqlHandler Maven / Gradle / Ivy

package com.envision.sql;

import com.envision.annotation.MarsColumn;
import com.google.common.collect.Lists;
import com.google.common.reflect.TypeToken;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.PropertyAccessorFactory;
import org.springframework.beans.factory.annotation.Autowired;

import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author qiweishi
 * @date 2018/11/10
 */
public abstract class SqlHandler {

    public final TypeToken typeToken = new TypeToken(getClass()) {
    };

    public final Type type = typeToken.getRawType();

    @Autowired
    private MarsMapper marsMapper;

    /** TODO 该全局变量 可能存在线程安全问题 于2018年12月20日11:56:39 lixiangxian 提出 */
    public static String tmpSql;

    @SuppressWarnings("unchecked")
    public List executeObject(String sql, Object... params) throws IllegalAccessException, InstantiationException {
        tmpSql = String.format(sql, params);
        List> maps = marsMapper.virtualSql();
        return maps2Objects(maps);
    }

    public List> executeMap(String sql, Object... params) throws IllegalAccessException, InstantiationException {
        tmpSql = String.format(sql, params);
        List> maps = marsMapper.virtualSql();
        return maps == null ? new ArrayList<>() : maps;
    }

    @SuppressWarnings("unchecked")
    public List maps2Objects(List> maps) throws InstantiationException, IllegalAccessException {
        List list = Lists.newArrayList();
        if (maps != null && maps.size() > 0) {
            for (Map map1 : maps) {
                if (map1 == null) {
                    continue;
                }
                T bean = ((Class) type).newInstance();
                map2Bean(map1, bean);
                list.add(bean);
            }
        }
        return list;
    }


    public static  T map2Bean(Map map, T bean) {
        BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(bean);
        wrapper.setAutoGrowNestedPaths(true);
        for (Field field : bean.getClass().getDeclaredFields()) {
            if (field == null || map == null) {
                continue;
            }
            String key = field.getName();
            if (field.isAnnotationPresent(MarsColumn.class)) {
                MarsColumn mp = field.getAnnotation(MarsColumn.class);
                key = mp.value();
            }
            wrapper.setPropertyValue(field.getName(), map.get(key));
        }
        return bean;
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy