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

com.gitee.qdbp.jdbc.model.SimpleFieldColumn Maven / Gradle / Ivy

package com.gitee.qdbp.jdbc.model;

import java.io.Serializable;
import com.gitee.qdbp.able.beans.Copyable;
import com.gitee.qdbp.able.beans.ModifyStatus;
import com.gitee.qdbp.tools.utils.VerifyTools;

/**
 * 字段及列信息
 *
 * @author zhaohuihua
 * @version 180601
 */
public class SimpleFieldColumn implements Copyable, Serializable {

    /** SerialVersionUID **/
    private static final long serialVersionUID = 1L;

    /** 是否可修改(作为全局缓存时设置为不可修改) **/
    protected final ModifyStatus modifyStatus = new ModifyStatus();
    /** 字段名 **/
    private String fieldName;
    /** 数据表列名 **/
    private String columnName;
    /** 描述文本 **/
    private String columnText;
    /** 数据类型(如DECIMAL/INT/TIMESTAMP/VARCHAR/NVARCHAR/TEXT等) **/
    private String dataType;
    /** Java字段类型 **/
    private Class javaType;
    /** Jdbc数据类型 (java.sql.Types中的字段值) **/
    private Integer jdbcType;
    /** 是不是主键 **/
    private boolean primaryKey;
    /** 新增时是否使用此字段 **/
    private boolean columnInsertable = true;
    /** 修改时是否使用此字段 **/
    private boolean columnUpdatable = true;
    /** Whether the column is a unique key. **/
    private boolean columnUnique = false;
    /** Whether the database column is nullable. **/
    private boolean columnNullable = true;
    /** The SQL fragment that is used when generating the DDL for the column. **/
    private String columnDefinition;
    /** The column length. (Applies only if a string-valued column is used.) **/
    private Integer columnLength;
    /** The precision for a decimal (exact numeric) column. (Applies only if a decimal column is used.) **/
    private Integer columnPrecision;
    /** (Optional) The scale for a decimal (exact numeric) column. (Applies only if a decimal column is used.) **/
    private Integer columnScale;
    /** 默认值 **/
    private Object columnDefault;
    /** 是否支持Unicode(如NVARCHAR/NCHAR/NEXT等) **/
    private boolean supportUnicode;

    /** 默认构造函数 **/
    public SimpleFieldColumn() {
    }

    /** 构造函数 **/
    public SimpleFieldColumn(String fieldName, String columnName) {
        this.setFieldName(fieldName);
        this.setColumnName(columnName);
    }

    /** 字段名 **/
    public String getFieldName() {
        return fieldName;
    }

    /** 字段名 **/
    public void setFieldName(String fieldName) {
        this.modifyStatus.checkModifiable();
        this.fieldName = fieldName;
    }

    /** 数据表列名 **/
    public String getColumnName() {
        return columnName;
    }

    /** 数据表列名 **/
    public void setColumnName(String columnName) {
        this.modifyStatus.checkModifiable();
        this.columnName = columnName;
    }

    /** 描述文本 **/
    public String getColumnText() {
        return columnText;
    }

    /** 描述文本 **/
    public void setColumnText(String columnText) {
        this.modifyStatus.checkModifiable();
        this.columnText = columnText;
    }

    /** 数据类型(如DECIMAL/INT/TIMESTAMP/VARCHAR/NVARCHAR/TEXT等) **/
    public String getDataType() {
        return dataType;
    }

    /** 数据类型(如DECIMAL/INT/TIMESTAMP/VARCHAR/NVARCHAR/TEXT等) **/
    public void setDataType(String dataType) {
        this.modifyStatus.checkModifiable();
        this.dataType = dataType;
    }

    /** Java字段类型 **/
    public Class getJavaType() {
        return javaType;
    }

    /** Java字段类型 **/
    public void setJavaType(Class javaType) {
        this.modifyStatus.checkModifiable();
        this.javaType = javaType;
    }

    /**
     * Jdbc数据类型
     * 
     * @return jdbcType {@link java.sql.Types}中的字段值
     */
    public Integer getJdbcType() {
        return jdbcType;
    }

    /**
     * Jdbc数据类型
     * 
     * @param jdbcType {@link java.sql.Types}中的字段值
     */
    public void setJdbcType(Integer jdbcType) {
        this.modifyStatus.checkModifiable();
        this.jdbcType = jdbcType;
    }

    /**
     * Jdbc数据类型
     * 
     * @return jdbcType {@link java.sql.Types}中的字段值
     * @deprecated use {@link #getJdbcType()}
     */
    @Deprecated
    public Integer getSqlType() {
        return this.getJdbcType();
    }

    /**
     * Jdbc数据类型
     * 
     * @param jdbcType {@link java.sql.Types}中的字段值
     * @deprecated use {@link #setJdbcType(Integer)}
     */
    @Deprecated
    public void setSqlType(Integer jdbcType) {
        this.setJdbcType(jdbcType);
    }

    /** 是不是主键 **/
    public boolean isPrimaryKey() {
        return primaryKey;
    }

    /** 是不是主键 **/
    public void setPrimaryKey(boolean primaryKey) {
        this.modifyStatus.checkModifiable();
        this.primaryKey = primaryKey;
    }

    /** 默认值 **/
    public Object getColumnDefault() {
        return columnDefault;
    }

    /** 默认值 **/
    public void setColumnDefault(Object columnDefault) {
        this.modifyStatus.checkModifiable();
        this.columnDefault = columnDefault;
    }

    /** 新增时是否使用此字段 **/
    public boolean isColumnInsertable() {
        return columnInsertable;
    }

    /** 新增时是否使用此字段 **/
    public void setColumnInsertable(boolean columnInsertable) {
        this.modifyStatus.checkModifiable();
        this.columnInsertable = columnInsertable;
    }

    /** 修改时是否使用此字段 **/
    public boolean isColumnUpdatable() {
        return columnUpdatable;
    }

    /** 修改时是否使用此字段 **/
    public void setColumnUpdatable(boolean columnUpdatable) {
        this.modifyStatus.checkModifiable();
        this.columnUpdatable = columnUpdatable;
    }

    /** 是不是唯一索引 **/
    public boolean isColumnUnique() {
        return columnUnique;
    }

    /** 是不是唯一索引 **/
    public void setColumnUnique(boolean columnUnique) {
        this.modifyStatus.checkModifiable();
        this.columnUnique = columnUnique;
    }

    /** 是否允许为空 **/
    public boolean isColumnNullable() {
        return columnNullable;
    }

    /** 是否允许为空 **/
    public void setColumnNullable(boolean columnNullable) {
        this.modifyStatus.checkModifiable();
        this.columnNullable = columnNullable;
    }

    /** 列定义信息 **/
    // columnDefinition="Decimal(10,2) default 1.00"
    // columnDefinition="TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP"
    // columnDefinition="VARCHAR(20) DEFAULT 'N/A'" // 字段串要用单引号括起来
    public String getColumnDefinition() {
        return columnDefinition;
    }

    /** 列定义信息 **/
    public void setColumnDefinition(String columnDefinition) {
        this.modifyStatus.checkModifiable();
        this.columnDefinition = columnDefinition;
    }

    /** 列内容长度 **/
    public Integer getColumnLength() {
        return columnLength;
    }

    /** 列内容长度 **/
    public void setColumnLength(Integer columnLength) {
        this.modifyStatus.checkModifiable();
        this.columnLength = columnLength;
    }

    /** 列数字精度, 如 DECIMAL(10,2)表示一共10位其中小数2位, precision=10, scale=2 **/
    public Integer getColumnPrecision() {
        return columnPrecision;
    }

    /** 列数字精度, 如 DECIMAL(10,2)表示一共10位其中小数2位, precision=10, scale=2 **/
    public void setColumnPrecision(Integer columnPrecision) {
        this.modifyStatus.checkModifiable();
        this.columnPrecision = columnPrecision;
    }

    /** 列小数位数, 如 DECIMAL(10,2)表示一共10位其中小数2位, precision=10, scale=2 **/
    public Integer getColumnScale() {
        return columnScale;
    }

    /** 列小数位数, 如 DECIMAL(10,2)表示一共10位其中小数2位, precision=10, scale=2 **/
    public void setColumnScale(Integer columnScale) {
        this.modifyStatus.checkModifiable();
        this.columnScale = columnScale;
    }

    /** 是否支持Unicode(如NVARCHAR/NCHAR/NTEXT等) **/
    public boolean isSupportUnicode() {
        return supportUnicode;
    }

    /** 是否支持Unicode(如NVARCHAR/NCHAR/NTEXT等) **/
    public void setSupportUnicode(boolean supportUnicode) {
        this.modifyStatus.checkModifiable();
        this.supportUnicode = supportUnicode;
    }

    /**
     * 与目标字段是否匹配(区分大小写)
     * 
     * @param fieldName 指定的字段名
     * @return 是否匹配
     */
    public boolean matchesByFieldName(String fieldName) {
        return VerifyTools.equals(this.fieldName, fieldName);
    }

    /**
     * 与目标列名是否匹配(不区分大小写)
     * 
     * @param columnName 指定的列名
     * @return 是否匹配
     */
    public boolean matchesByColumnName(String columnName) {
        return VerifyTools.equals(this.columnName, columnName);
    }

    /**
     * 与目标列别名是否匹配(单表增删改查没有别名, 因此只与列名比较, 不区分大小写)
     * 
     * @param columnAlias 指定的列别名
     * @return 是否匹配
     */
    public boolean matchesByColumnAlias(String columnAlias) {
        return columnName.equalsIgnoreCase(columnAlias);
    }

    /** 返回表字段名 **/
    public String toTableFieldName() {
        return this.fieldName;
    }

    /** 返回表列名 **/
    public String toTableColumnName() {
        return this.columnName;
    }

    /** 返回完整列名 **/
    public String toFullColumnName() {
        return this.columnName;
    }

    protected void copyTo(SimpleFieldColumn instance) {
        instance.setFieldName(this.getFieldName());
        instance.setColumnName(this.getColumnName());
        instance.setColumnText(this.getColumnText());
        instance.setDataType(this.getDataType());
        instance.setJavaType(this.getJavaType());
        instance.setJdbcType(this.getJdbcType());
        instance.setPrimaryKey(this.isPrimaryKey());
        instance.setColumnInsertable(this.isColumnInsertable());
        instance.setColumnUpdatable(this.isColumnUpdatable());
        instance.setColumnDefault(this.getColumnDefault());
        instance.setColumnUnique(this.isColumnUnique());
        instance.setColumnNullable(this.isColumnNullable());
        instance.setColumnDefinition(this.getColumnDefinition());
        instance.setColumnLength(this.getColumnLength());
        instance.setColumnPrecision(this.getColumnPrecision());
        instance.setColumnScale(this.getColumnScale());
        instance.setSupportUnicode(this.isSupportUnicode());
        // 副本不设置只读
        // instance.modifyStatus.setModifiable(this.modifyStatus.isModifiable());
    }

    @Override
    public SimpleFieldColumn copy() {
        SimpleFieldColumn instance = new SimpleFieldColumn();
        copyTo(instance);
        return instance;
    }

    /**
     * 将当前对象转换为子类对象
     *
     * @param clazz 目标类型
     * @return 目标对象
     */
    public  T to(Class clazz) {
        T instance;
        try {
            instance = clazz.newInstance();
        } catch (Exception e) {
            throw new IllegalArgumentException("Failed to create " + clazz.getSimpleName() + " instance.", e);
        }

        this.copyTo(instance);
        return instance;
    }

    /** {@inheritDoc} **/
    public String toString() {
        StringBuilder buffer = new StringBuilder();
        buffer.append('{').append(fieldName).append(':').append(columnName).append('}');
        return buffer.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy