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

com.blade.jdbc.Base Maven / Gradle / Ivy

The newest version!
package com.blade.jdbc;

import com.blade.jdbc.dialect.*;
import com.blade.jdbc.page.PageRow;
import lombok.extern.slf4j.Slf4j;
import org.sql2o.Connection;
import org.sql2o.Sql2o;

import javax.sql.DataSource;
import java.util.function.Supplier;

@Slf4j
public final class Base {

    public static final ThreadLocal    pageLocal             = new ThreadLocal<>();
    public static final ThreadLocal connectionThreadLocal = new ThreadLocal<>();

    public static Sql2o   sql2o;
    public static Dialect dialect = new MySQLDialect();

    public static Sql2o open(String url, String user, String password) {
        sql2o = new Sql2o(url, user, password);
        initSql2o();
        return sql2o;
    }

    public static Sql2o open(DataSource dataSource) {
        sql2o = new Sql2o(dataSource);
        initSql2o();
        return sql2o;
    }

    public static Sql2o open(Sql2o sql2o_) {
        sql2o = sql2o_;
        initSql2o();
        return sql2o;
    }

    private static void initSql2o() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            dialect = new MySQLDialect();
            log.info("⬢ Using Database: MySQL");
        } catch (Exception e) {
        }
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            dialect = new OracleDialect();
            log.info("⬢ Using Database: Oracle");
        } catch (Exception e) {
        }
        try {
            Class.forName("org.postgresql.Driver");
            dialect = new PostgreDialect();
            log.info("⬢ Using Database: PostgreSQL");
        } catch (Exception e) {
        }
        try {
            Class.forName("com.ibm.db2.jcc.DB2Driver");
            dialect = new Db2Dialect();
            log.info("⬢ Using Database: DB2");
        } catch (Exception e) {
        }
        log.info("⬢ Blade-JDBC initializing");
    }

    /**
     * 原子提交
     *
     * @param supplier
     * @param 
     */
    public static  T atomic(Supplier supplier) {
        T result = null;
        try (Connection connection = sql2o.beginTransaction()) {
            connectionThreadLocal.set(connection);
            result = supplier.get();
            connection.commit();
        } catch (Exception e) {
            log.error("Transaction rollback", e);
        } finally {
            connectionThreadLocal.remove();
            return result;
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy