Java反射取得一个对象的信息

来源:互联网 发布:知乎一小时系列 网盘 编辑:程序博客网 时间:2024/05/01 02:47

获取实体类字段及相应注解

package com.mnt.database.dao.customer;import java.beans.IntrospectionException;import java.beans.PropertyDescriptor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.List;import javax.persistence.Column;import javax.persistence.Table;import org.springframework.stereotype.Repository;import com.mnt.common.util.JodaTimeTools;import com.mnt.common.util.StringTools;import com.mnt.database.dao.CoreHibernateDAO;/** * Ftp服务器DAO *  * @author zcq * @version 1.0 *  *          变更履历: *          v1.0 2016-3-22 zcq 初版 */@Repositorypublic class FtpDAO extends CoreHibernateDAO {    /**     * 查询同步数据     *      * @author zcq     * @param condition     * @return     */    public List<Object[]> queryDataForFTP(Class<?> queryClass) {        // 设置别名        String aliasName = queryClass.getSimpleName();        // 组织要查询的字段        String fieldNames = "";        for (Field field : getFields(queryClass)) {            String name = field.getName();            if ("serialVersionUID".equals(name)) {                continue;            }            try {                PropertyDescriptor pd = new PropertyDescriptor(field.getName(), queryClass);                Method getMethod = pd.getReadMethod();// 获得get方法                if (getMethod.isAnnotationPresent(Column.class)) {                    Column column = (Column) getMethod.getAnnotation(Column.class);                    fieldNames += "," + aliasName + "." + column.name();                } else {                    fieldNames += "," + aliasName + "." + StringTools.nameFieldToColumn(name);                }            } catch (IntrospectionException e) {                e.printStackTrace();            }        }        // 生成查询语句        String yesterday = JodaTimeTools.before_current_day_str(1, JodaTimeTools.FORMAT_6);        String querySQL = "SELECT " + fieldNames.replaceFirst(",", " ")                + "        FROM " + queryClass.getAnnotation(Table.class).name() + " AS " + aliasName                + "        WHERE " + aliasName + ".create_time LIKE '%" + yesterday + "%'";        return this.SQLQuery(querySQL);    }    /**     * 实体类字段     *      * @author zcq     * @param queryClass     * @return     */    private Field[] getFields(Class<?> queryClass) {        Field[] fields = queryClass.getDeclaredFields();        Class<?> superClass = queryClass.getSuperclass();        while (superClass != null) {            Field[] tempField = superClass.getDeclaredFields();            Field[] tempResultField = new Field[fields.length + tempField.length];            for (int i = 0; i < fields.length; i++) {                tempResultField[i] = fields[i];            }            for (int j = 0; j < tempField.length; j++) {                tempResultField[j + fields.length] = tempField[j];            }            fields = tempResultField;            superClass = superClass.getSuperclass();        }        Field.setAccessible(fields, true);        return fields;    }}


0 0
原创粉丝点击