java jdbc查询结果转实体

时间:2020-03-25 10:15 作者:playgame 阅读数:18
在开发过程中可能会使用到jdbc获取数据
通过jdbcTemplate.queryForList获取到的数据是List,List里是Map类型数据,实际使用中可能希望把获取到的数据转换成实体类
具体实现如下:

import org.apache.commons.lang.ArrayUtils;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

/**
 * 类描述:<br>
 * 包括方法:<br>
 * <li>
 *
 * @author : 
 * @version :v1.0
 * date : 2020/03/16 9:04
 * @since : JDK1.8
 * *************************************更新记录START*************************************
 * 版本:   修改日期:    修改人:
 * 修改内容:
 * *************************************更新记录END***************************************
 */
public class DtoReflectionSqlUtil {
    /**
     * map转实体
     *
     * @param map 源数据
     * @param cls 目标对象
     * @return 结果
     * @throws Exception 异常
     */
    public static Object getDtoObject(Map<String, Object> map, Class<?> cls) throws Exception {
        Constructor<?> ct = cls.getConstructor();
        Object retobj = ct.newInstance();
        Class<?> supClass = cls.getSuperclass();
        Method[] ms = cls.getDeclaredMethods();
        if (!"java.lang.Object".equals(supClass.getName())) {
            Method[] supms = supClass.getDeclaredMethods();
            ms = (Method[]) ArrayUtils.addAll(ms, supms);
        }
        for (int i = 0; i < ms.length; i++) {
            Method m = ms[i];
            Class<?>[] pts = m.getParameterTypes();
            if (m.getReturnType().toString().equals("void")) {
                Object value = map.get(m.getName().replaceAll("set", "").toUpperCase());
                if (value != null) {
                    if (pts[0] == String.class) {
                        m.invoke(retobj, new Object[]{value.toString()});
                    } else if (pts[0] == Integer.class || pts[0] == int.class) {
                        m.invoke(retobj, new Object[]{Integer.parseInt(value.toString())});
                    } else if (pts[0] == Long.class || pts[0] == long.class) {
                        m.invoke(retobj, new Object[]{Long.parseLong(value.toString())});
                    } else if (pts[0] == Double.class || pts[0] == double.class) {
                        m.invoke(retobj, new Object[]{Double.parseDouble(value.toString())});
                    } else if (pts[0] == Calendar.class) {
                        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        Calendar calendar = Calendar.getInstance();
                        calendar.setTime(format.parse(value.toString()));
                        m.invoke(retobj, new Object[]{calendar});
                    } else if (pts[0] == BigDecimal.class) {
                        m.invoke(retobj, new Object[]{value});
                    } else if (pts[0] == Timestamp.class) {
                        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        Date date = format.parse(value.toString());
                        m.invoke(retobj, new Object[]{date});
                    } else if (pts[0] == Date.class) {
                        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        Date date = format.parse(value.toString());
                        m.invoke(retobj, new Object[]{date});
                    }
                } else {
                    if (pts[0] == Integer.class) {
                        m.invoke(retobj, new Object[]{0});
                    } else if (pts[0] == Long.class) {
                        m.invoke(retobj, new Object[]{0L});
                    } else if (pts[0] == Double.class) {
                        m.invoke(retobj, new Object[]{0.00});
                    }
                }
            }
        }
        return retobj;
    }
}



评论列表




注册用户登录后才能发表评论,请登录注册,访问 博客首页