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

com.denghb.eorm.utils.EormUtils Maven / Gradle / Ivy

package com.denghb.eorm.utils;


import com.denghb.eorm.annotation.Ecolumn;
import com.denghb.eorm.annotation.Etable;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;


/**
 * 支持使用Annotation标注表结构
 */
public class EormUtils {
    private static final Map _CACHE = new ConcurrentHashMap();
    /**
     * 默认主键名
     */
    private final static String DEFAULT_PRIMARY_KEY_NAME = "id";

    private final static String serialVersionUID = "serialVersionUID";

    public static  String getTableName(final Class clazz) {

        String key = "tableName:" + clazz.getName();
        String tableName = (String) _CACHE.get(key);
        if (null != tableName) {
            return tableName;
        }
        // 获取表名
        Etable table = clazz.getAnnotation(Etable.class);
        if (null == table) {
            return JdbcUtils.humpToUnderline(clazz.getSimpleName());
        }
        StringBuilder sb = new StringBuilder("`");
        // 获取数据库名称
        String database = table.database();

        if (database.trim().length() != 0) {
            sb.append(database);
            sb.append("`.`");
        }
        // 获取注解的表名
        sb.append(table.name());
        sb.append("`");
        tableName = sb.toString();

        _CACHE.put(key, tableName);

        return tableName;
    }


    /**
     * 获取主键名
     *
     * @param clazz
     */
    public static List getPrimaryKeyNames(Class clazz) {

        String key = "primaryKeys:" + clazz.getName();
        List primaryKeys = (List) _CACHE.get(key);
        if (null != primaryKeys) {
            return primaryKeys;
        }

        primaryKeys = new ArrayList();
        Field[] classFields = clazz.getDeclaredFields();
        for (Field field : classFields) {

            Ecolumn ecolumn = field.getAnnotation(Ecolumn.class);
            if (null != ecolumn && ecolumn.primaryKey()) {
                primaryKeys.add(ecolumn.name());
            }
        }

        if (primaryKeys.isEmpty()) {
            primaryKeys.add(DEFAULT_PRIMARY_KEY_NAME);
        }

        _CACHE.put(key, primaryKeys);

        return primaryKeys;
    }

    public static  TableInfo getTableInfo(T domain) {
        // 对象太多不缓存
        TableInfo table = new TableInfo();

        Class clazz = domain.getClass();

        table.setTableName(getTableName(clazz));

        //
        List fields = ReflectUtils.getFields(clazz);
        for (Field field : fields) {

            if (serialVersionUID.equals(field.getName())) {
                continue;
            }
            Object value = ReflectUtils.getFieldValue(field, domain);

            Ecolumn ecolumn = field.getAnnotation(Ecolumn.class);
            if (null != ecolumn) {

                boolean isPrimaryKey = ecolumn.primaryKey();
                if (isPrimaryKey) {
                    table.getAllPrimaryKeyFields().add(field);
                }

                List columnList = isPrimaryKey ? table.getPrimaryKeyColumns() : table.getCommonColumns();
                if (null != value) {
                    columnList.add(new Column(ecolumn.name(), value));
                    table.getAllColumns().add(new Column(ecolumn.name(), value));
                }

            } else {

                String columnName = field.getName();
                columnName = JdbcUtils.humpToUnderline(columnName);
                boolean isPrimaryKey = DEFAULT_PRIMARY_KEY_NAME.equals(columnName);
                if (isPrimaryKey) {
                    table.getAllPrimaryKeyFields().add(field);
                }

                List columnList = isPrimaryKey ? table.getPrimaryKeyColumns() : table.getCommonColumns();
                if (null != value) {
                    columnList.add(new Column(columnName, value));
                    table.getAllColumns().add(new Column(columnName, value));
                }

            }

        }


        return table;
    }


    /**
     *
     */
    public static class TableInfo {

        private String tableName;

        /**
         * 主键字段
         */
        private List allPrimaryKeyFields = new ArrayList();

        /**
         * 有值的列
         */
        private List allColumns = new ArrayList();

        /**
         * 有值的主键列
         */
        private List primaryKeyColumns = new ArrayList();

        /**
         * 有值的普通列
         */
        private List commonColumns = new ArrayList();

        public String getTableName() {
            return tableName;
        }

        public void setTableName(String tableName) {
            this.tableName = tableName;
        }

        public List getAllPrimaryKeyFields() {
            return allPrimaryKeyFields;
        }

        public void setAllPrimaryKeyFields(List allPrimaryKeyFields) {
            this.allPrimaryKeyFields = allPrimaryKeyFields;
        }

        public List getAllColumns() {
            return allColumns;
        }

        public void setAllColumns(List allColumns) {
            this.allColumns = allColumns;
        }

        public List getPrimaryKeyColumns() {
            return primaryKeyColumns;
        }

        public void setPrimaryKeyColumns(List primaryKeyColumns) {
            this.primaryKeyColumns = primaryKeyColumns;
        }

        public List getCommonColumns() {
            return commonColumns;
        }

        public void setCommonColumns(List commonColumns) {
            this.commonColumns = commonColumns;
        }
    }

    public static class Column {

        private String name;

        private Object value;

        public Column(String name, Object value) {
            this.name = name;
            this.value = value;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Object getValue() {
            return value;
        }

        public void setValue(Object value) {
            this.value = value;
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy