
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