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

org.nkjmlab.sorm4j.table.Table Maven / Gradle / Ivy

package org.nkjmlab.sorm4j.table;

import org.nkjmlab.sorm4j.Orm;
import org.nkjmlab.sorm4j.OrmConnection;
import org.nkjmlab.sorm4j.Sorm;
import org.nkjmlab.sorm4j.annotation.Experimental;
import org.nkjmlab.sorm4j.common.ConsumerHandler;
import org.nkjmlab.sorm4j.common.FunctionHandler;
import org.nkjmlab.sorm4j.internal.util.Try;

@Experimental
public interface Table extends TableMappedOrm {

  /**
   * Gets {@link Orm} object
   *
   * @return
   */
  @Override
  Sorm getOrm();

  /**
   * @param 
   * @param orm
   * @param valueType
   * @return
   */
  static  Table create(Sorm orm, Class valueType) {
    return new SimpleTable<>(orm, valueType);
  }

  default TableConnection toTableConnection(OrmConnection conn) {
    return TableConnection.of(conn, getValueType(), getTableName());
  }

  /**
   * Open {@link TableOrmConnection}. You should always use try-with-resources block to
   * ensure the database connection is released.
   *
   * @return
   */
  default TableConnection open() {
    return TableConnection.of(getOrm().open(), getValueType(), getTableName());
  }

  /**
   * Accepts a {@link OrmConnection} handler for a task with object-relation mapping. The connection
   * will be closed after the process of handler.
   *
   * @param handler
   */
  default void acceptHandler(ConsumerHandler> handler) {
    try (TableConnection conn = open()) {
      handler.accept(conn);
    } catch (Exception e) {
      throw Try.rethrow(e);
    }
  }

  /**
   * Applies a {@link OrmConnection} handler for a task with object-relation mapping and gets the
   * result. The connection will be closed after the process of handler.
   *
   * @param 
   * @param connectionHandler
   * @return
   */
  default  R applyHandler(FunctionHandler, R> handler) {
    try (TableConnection conn = open()) {
      return handler.apply(conn);
    } catch (Exception e) {
      throw Try.rethrow(e);
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy