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

org.test4j.module.database.dbop.DBOperator Maven / Gradle / Ivy

package org.test4j.module.database.dbop;

import java.io.File;
import java.io.FileInputStream;
import java.util.List;
import java.util.Map;

import org.test4j.hamcrest.iassert.object.impl.CollectionAssert;
import org.test4j.hamcrest.iassert.object.impl.MapAssert;
import org.test4j.hamcrest.iassert.object.impl.ObjectAssert;
import org.test4j.hamcrest.iassert.object.intf.ICollectionAssert;
import org.test4j.hamcrest.iassert.object.intf.IMapAssert;
import org.test4j.hamcrest.iassert.object.intf.IObjectAssert;
import org.test4j.module.database.dbop.IDBOperator;
import org.test4j.module.database.dbop.ISqlSet;
import org.test4j.module.database.dbop.ITableOp;
import org.test4j.module.database.environment.DBEnvironment;
import org.test4j.module.database.environment.DBEnvironmentFactory;
import org.test4j.module.database.utility.SqlRunner;
import org.test4j.tools.commons.ExceptionWrapper;

@SuppressWarnings({ "rawtypes", "unchecked" })
public class DBOperator implements IDBOperator {
    /**
     * 是否在db操作
     */
    public static ThreadLocal IN_DB_OPERATOR = new ThreadLocal();
    static {
        IN_DB_OPERATOR.set(false);
    }

    @Override
    public IDBOperator useDB(String dataSource) {
        IN_DB_OPERATOR.set(true);
        try {
            DBEnvironment environment = DBEnvironmentFactory.getDBEnvironment(dataSource);
            DBEnvironmentFactory.changeDBEnvironment(environment);
            return this;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public IDBOperator useDefaultDB() {
        IN_DB_OPERATOR.set(true);
        try {
            DBEnvironment environment = DBEnvironmentFactory.getDefaultDBEnvironment();
            DBEnvironmentFactory.changeDBEnvironment(environment);
            return this;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public IDBOperator cleanTable(String table, String... more) {
        IN_DB_OPERATOR.set(true);
        try {
            SqlRunner.instance.execute("delete from " + table);
            for (String item : more) {
                SqlRunner.instance.execute("delete from " + item);
            }
            return this;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public IDBOperator execute(String sql) {
        IN_DB_OPERATOR.set(true);
        try {
            SqlRunner.instance.execute(sql);
            return this;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public IDBOperator execute(File file) {
        IN_DB_OPERATOR.set(true);
        try {
            try {
                SqlRunner.instance.executeFromStream(new FileInputStream(file));
            } catch (Exception e) {
                throw ExceptionWrapper.wrapWithRuntimeException(e);
            }
            return this;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public IDBOperator commit() {
        IN_DB_OPERATOR.set(true);
        try {
            SqlRunner.instance.commit();
            return this;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public IDBOperator rollback() {
        IN_DB_OPERATOR.set(true);
        try {
            SqlRunner.instance.rollback();
            return this;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public IMapAssert queryAsMap(String query) {
        IN_DB_OPERATOR.set(true);
        try {
            Map map = SqlRunner.instance.queryMap(query);
            return new MapAssert(map);
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public IObjectAssert queryAsPoJo(String query, Class objClazz) {
        IN_DB_OPERATOR.set(true);
        try {
            Object o = SqlRunner.instance.query(query, objClazz);
            return new ObjectAssert(o);
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public ICollectionAssert query(String sql) {
        IN_DB_OPERATOR.set(true);
        try {
            List list = SqlRunner.instance.queryMapList(sql);
            return new CollectionAssert(list);
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public ICollectionAssert queryList(String query, Class pojo) {
        IN_DB_OPERATOR.set(true);
        try {
            List list = SqlRunner.instance.queryList(query, pojo);
            return new CollectionAssert(list);
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public ITableOp table(String table) {
        IN_DB_OPERATOR.set(true);
        try {
            ITableOp tableOperator = new TableOp(table);
            return tableOperator;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public IDBOperator execute(ISqlSet sqlSet) {
        IN_DB_OPERATOR.set(true);
        try {
            if (sqlSet == null) {
                throw new RuntimeException("the insert sqlSet can't be null.");
            }
            sqlSet.execute();
            return this;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public List> returnList(String table) {
        IN_DB_OPERATOR.set(true);
        try {
            String query = "select * from " + table;
            List list = SqlRunner.instance.queryMapList(query);
            return list;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public List returnList(String table, Class pojoClazz) {
        IN_DB_OPERATOR.set(true);
        try {
            String query = "select * from " + table;
            List list = SqlRunner.instance.queryList(query, pojoClazz);
            return list;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public List> returnQuery(String query) {
        IN_DB_OPERATOR.set(true);
        try {
            List list = SqlRunner.instance.queryMapList(query);
            return list;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }

    @Override
    public List returnQuery(String query, Class pojoClazz) {
        IN_DB_OPERATOR.set(true);
        try {
            List list = SqlRunner.instance.queryList(query, pojoClazz);
            return list;
        } finally {
            IN_DB_OPERATOR.set(false);
        }
    }
}