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

cn.dreampie.orm.Record Maven / Gradle / Ivy

There is a newer version: 1.3.0.RELEASE
Show newest version
package cn.dreampie.orm;

import cn.dreampie.orm.generate.Generator;

import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Map;

import static cn.dreampie.common.util.Checker.checkNotNull;

/**
 * Record
 */
public class Record extends Base {

  private TableMeta tableMeta;
  private boolean useCache = true;

  public Record() {
  }

  public Record(String tableName) {
    this(tableName, DEFAULT_GENERATED_KEY);
  }

  public Record(String tableName, boolean cached) {
    this(tableName, DEFAULT_GENERATED_KEY, null, new String[]{}, cached);
  }

  public Record(String tableName, boolean cached, int expired) {
    this(tableName, DEFAULT_GENERATED_KEY, null, new String[]{}, cached, expired);
  }

  public Record(String tableName, String generatedKey) {
    this(null, tableName, generatedKey);
  }

  public Record(String tableName, String generatedKey, String[] primaryKey) {
    this(null, tableName, generatedKey, null, primaryKey);
  }

  public Record(String dsName, String tableName, String generatedKey) {
    this(dsName, tableName, generatedKey, new String[]{});
  }

  public Record(String dsName, String tableName, String generatedKey, String[] primaryKey) {
    this(dsName, tableName, generatedKey, null, primaryKey);
  }

  public Record(String tableName, String generatedKey, Generator generator) {
    this(null, tableName, generatedKey, generator);
  }

  public Record(String dsName, String tableName, String generatedKey, Generator generator) {
    this(dsName, tableName, generatedKey, generator, null);
  }

  public Record(String tableName, String generatedKey, Generator generator, String[] primaryKey) {
    this(null, tableName, generatedKey, generator, primaryKey);
  }

  public Record(String dsName, String tableName, String generatedKey, Generator generator, String[] primaryKey) {
    this(dsName, tableName, generatedKey, generator, primaryKey, false);
  }

  public Record(String tableName, String generatedKey, Generator generator, String[] primaryKey, boolean cached) {
    this(null, tableName, generatedKey, generator, primaryKey, cached);
  }

  public Record(String tableName, String generatedKey, Generator generator, String[] primaryKey, boolean cached, int expired) {
    this(null, tableName, generatedKey, generator, primaryKey, cached, expired);
  }

  /**
   * @param dsName       数据源
   * @param tableName    表名
   * @param generatedKey 数据库自动生成的主键
   * @param generator    主键生成器 默认uuid生成主键
   * @param primaryKey   其他主键
   * @param cached       使用对数据缓存
   */
  public Record(String dsName, String tableName, String generatedKey, Generator generator, String[] primaryKey, boolean cached) {
    setTableMeta(dsName, tableName, generatedKey, generator, primaryKey, cached);
  }

  public Record(String dsName, String tableName, String generatedKey, Generator generator, String[] primaryKey, boolean cached, int expired) {
    setTableMeta(dsName, tableName, generatedKey, generator, primaryKey, cached, expired);
  }

  /**
   * @param tableMeta 数据表的元数据
   */
  public Record(TableMeta tableMeta) {
    this.tableMeta = tableMeta;
  }

  public Record reNew() {
    return new Record(tableMeta);
  }

  private Record instance(String useDS, boolean useCache) {
    Record record;
    if (useDS != null && !tableMeta.getDsName().equals(useDS)) {
      record = new Record(tableMeta);
    } else {
      record = new Record(tableMeta);
    }
    record.useCache = useCache;
    return record;
  }

  /**
   * 是否使用缓存
   *
   * @return boolean
   */
  public boolean isUseCache() {
    return useCache;
  }

  /**
   * 不使用缓存
   *
   * @return Record
   */
  public Record unCache() {
    if (!this.useCache) {
      return this;
    } else {
      return instance(null, false);
    }
  }

  /**
   * 切换数据源
   *
   * @param useDS 数据源名称
   * @return Record
   */
  public Record useDS(String useDS) {
    checkNotNull(useDS, "DataSourceName could not be null.");
    if (!this.useCache && !tableMeta.getDsName().equals(useDS)) {
      this.tableMeta = TableMetaBuilder.buildTableMeta(new TableMeta(useDS, tableMeta.getTableName(), tableMeta.getGeneratedKey(), tableMeta.isGenerated(), tableMeta.getGenerator(), tableMeta.getPrimaryKey(), tableMeta.isCached(), tableMeta.getExpired()), Metadata.getDataSourceMeta(useDS));
      return this;
    } else {
      if (tableMeta.getDsName().equals(useDS)) {
        return this;
      } else {
        return instance(useDS, true);
      }
    }
  }

  /**
   * 获取数据表的元数据
   *
   * @return TableMeta
   */
  public TableMeta getTableMeta() {
    checkNotNull(tableMeta, "Could not find tableMeta.");
    return tableMeta;
  }

  public Record setTableMeta(String tableName) {
    setTableMeta(tableName, DEFAULT_GENERATED_KEY);
    return this;
  }

  public Record setTableMeta(String tableName, boolean cached) {
    setTableMeta(tableName, DEFAULT_GENERATED_KEY, null, new String[]{}, cached);
    return this;
  }

  public Record setTableMeta(String tableName, String generatedKey) {
    setTableMeta(null, tableName, generatedKey);
    return this;
  }

  public Record setTableMeta(String tableName, String generatedKey, String[] primaryKey) {
    setTableMeta(null, tableName, generatedKey, null, primaryKey);
    return this;
  }

  public Record setTableMeta(String dsName, String tableName, String generatedKey) {
    setTableMeta(dsName, tableName, generatedKey, null, null);
    return this;
  }

  public Record setTableMeta(String dsName, String tableName, String generatedKey, String[] primaryKey) {
    setTableMeta(dsName, tableName, generatedKey, null, primaryKey);
    return this;
  }

  public Record setTableMeta(String tableName, String generatedKey, Generator generator) {
    setTableMeta(null, tableName, generatedKey, generator);
    return this;
  }

  public Record setTableMeta(String dsName, String tableName, String generatedKey, Generator generator) {
    setTableMeta(dsName, tableName, generatedKey, generator, null);
    return this;
  }

  public Record setTableMeta(String tableName, String generatedKey, Generator generator, String[] primaryKey) {
    setTableMeta(null, tableName, generatedKey, generator, primaryKey);
    return this;
  }

  public Record setTableMeta(String dsName, String tableName, String generatedKey, Generator generator, String[] primaryKey) {
    setTableMeta(dsName, tableName, generatedKey, generator, primaryKey, false);
    return this;
  }

  public Record setTableMeta(String tableName, String generatedKey, Generator generator, String[] primaryKey, boolean cached) {
    setTableMeta(null, tableName, generatedKey, generator, primaryKey, cached);
    return this;
  }


  public Record setTableMeta(String dsName, String tableName, String generatedKey, Generator generator, String[] primaryKey, boolean cached) {
    setTableMeta(dsName, tableName, generatedKey, generator, primaryKey, cached, -1);
    return this;
  }

  /**
   * 设置table信息
   *
   * @param dsName       数据源
   * @param tableName    表名
   * @param generatedKey 自动生成主键
   * @param generator    主键生成器
   * @param primaryKey   其他主键
   * @param cached       缓存
   * @return record
   */
  public Record setTableMeta(String dsName, String tableName, String generatedKey, Generator generator, String[] primaryKey, boolean cached, int expired) {
    if (primaryKey == null) {
      primaryKey = new String[]{};
    }
    if (dsName == null) {
      dsName = Metadata.getDefaultDsName();
    }
    checkNotNull(dsName, "Could not found dataSourceMeta.");
    checkNotNull(tableName, "Could not found tableName.");
    if (Metadata.hasTableMeta(dsName, tableName)) {
      this.tableMeta = Metadata.getTableMeta(dsName, tableName);
    } else {
      this.tableMeta = TableMetaBuilder.buildTableMeta(new TableMeta(dsName, tableName, generatedKey, generator != null, generator, primaryKey, cached, expired), Metadata.getDataSourceMeta(dsName));
    }
    return this;
  }

  public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
    tableMeta = (TableMeta) in.readObject();
    putAttrs((Map) in.readObject());
    useCache = (Boolean) in.readObject();
    setAlias((String) in.readObject());
  }

  public void writeExternal(ObjectOutput out) throws IOException {
    //增加一个新的对象 String dsName, String tableName, String pKeys, boolean lockKey, boolean cached
    out.writeObject(tableMeta);
    out.writeObject(getAttrs());
    out.writeObject(useCache);
    out.writeObject(getAlias());
  }
}








© 2015 - 2025 Weber Informatics LLC | Privacy Policy