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

cn.coder.jdbc.SqlSessionFactory Maven / Gradle / Ivy

package cn.coder.jdbc;

import java.util.HashMap;
import java.util.Properties;

import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.coder.jdbc.core.DataSourceConfig;
import cn.coder.jdbc.core.JdbcDataSource;
import cn.coder.jdbc.session.DefaultSqlSession;
import cn.coder.jdbc.session.ProxySession;
import cn.coder.jdbc.util.Assert;
import cn.coder.jdbc.util.ObjectUtils;

public final class SqlSessionFactory {
	private static final Logger logger = LoggerFactory.getLogger(SqlSessionFactory.class);

	public static final String DEFAULT_SOURCE = "default";
	private static final HashMap sourceMap = new HashMap<>();
	private final DataSource dataSource;
	private SqlSession session;

	public SqlSessionFactory(DataSource ds) {
		this.dataSource = ds;
	}

	public static SqlSessionFactory getInnerFactory() {
		return getInnerFactory(DEFAULT_SOURCE);
	}

	public static SqlSessionFactory getInnerFactory(String source) {
		DataSource dataSource = sourceMap.get(source);
		return new SqlSessionFactory(dataSource);
	}

	public SqlSession cachedSession() {
		if (session == null)
			session = newSession();
		return session;
	}

	public SqlSession newSession() {
		Assert.notNull(this.dataSource, "Property 'dataSource' is required");
		return ProxySession.bind(new DefaultSqlSession(this.dataSource));
	}

	public static void createSessions() {
		Properties p = ObjectUtils.loadProperties("jdbc.properties");
		Assert.notNull(p, "The jdbc.properties file not found");

		String[] sources = (DEFAULT_SOURCE + "," + p.getProperty("jdbc.all", "")).split(",");
		DataSourceConfig config;
		for (String source : sources) {
			config = new DataSourceConfig(source, p);
			sourceMap.put(source, new JdbcDataSource(config));
		}
	}

	public synchronized static void destory() {
		long start = System.nanoTime();
		for (DataSource source : sourceMap.values()) {
			if (source instanceof JdbcDataSource)
				((JdbcDataSource) source).close();
		}
		sourceMap.clear();
		if (logger.isDebugEnabled())
			logger.debug("Sessions destroied: {}ns", (System.nanoTime() - start));
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy