소스 검색

AR模式自动关闭数据库连接(之前需要手动设置事务)

Caratacus 8 년 전
부모
커밋
c5598bdff1

+ 1 - 1
mybatis-plus/pom.xml

@@ -3,7 +3,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>com.baomidou</groupId>
 	<artifactId>mybatis-plus</artifactId>
-	<version>2.0.1</version>
+	<version>2.0.2</version>
 	<packaging>jar</packaging>
 
 	<name>mybatis-plus</name>

+ 22 - 1
mybatis-plus/src/main/java/com/baomidou/mybatisplus/entity/GlobalConfiguration.java

@@ -30,7 +30,10 @@ import com.baomidou.mybatisplus.toolkit.TableInfoHelper;
 import org.apache.ibatis.logging.Log;
 import org.apache.ibatis.logging.LogFactory;
 import org.apache.ibatis.session.Configuration;
+import org.apache.ibatis.session.ExecutorType;
+import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionTemplate;
 
 import javax.sql.DataSource;
 import java.io.Serializable;
@@ -87,7 +90,8 @@ public class GlobalConfiguration implements Cloneable, Serializable {
 	private SqlSessionFactory sqlSessionFactory;
 
 	private Set<String> mapperRegistryCache = new ConcurrentSkipListSet<String>();
-
+	private SqlSession sqlSession;
+	private SqlSession sqlsessionBatch;
 	public GlobalConfiguration() {
 		// 构造方法
 	}
@@ -179,6 +183,8 @@ public class GlobalConfiguration implements Cloneable, Serializable {
 
 	public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
 		this.sqlSessionFactory = sqlSessionFactory;
+		this.sqlSession = new SqlSessionTemplate(sqlSessionFactory);
+		this.sqlsessionBatch = new SqlSessionTemplate(sqlSessionFactory, ExecutorType.BATCH);
 	}
 
 	public boolean isCapitalMode() {
@@ -203,6 +209,14 @@ public class GlobalConfiguration implements Cloneable, Serializable {
 		}
 	}
 
+	public SqlSession getSqlSession() {
+		return sqlSession;
+	}
+
+	public SqlSession getSqlsessionBatch() {
+		return sqlsessionBatch;
+	}
+
 	@Override
 	protected GlobalConfiguration clone() throws CloneNotSupportedException {
 		return (GlobalConfiguration) super.clone();
@@ -344,6 +358,13 @@ public class GlobalConfiguration implements Cloneable, Serializable {
 		return GlobalConfig(configuration).getIdentifierQuote();
 	}
 
+	public static SqlSession getSqlSession(Configuration configuration) {
+		return GlobalConfig(configuration).getSqlSession();
+	}
+
+	public static SqlSession getSqlsessionBatch(Configuration configuration) {
+		return GlobalConfig(configuration).getSqlsessionBatch();
+	}
 	/**
 	 * 设置元数据相关属性
 	 *

+ 15 - 1
mybatis-plus/src/main/java/com/baomidou/mybatisplus/mapper/SqlHelper.java

@@ -22,8 +22,10 @@ import com.baomidou.mybatisplus.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.toolkit.TableInfoHelper;
 import org.apache.ibatis.logging.Log;
 import org.apache.ibatis.logging.LogFactory;
+import org.apache.ibatis.session.Configuration;
 import org.apache.ibatis.session.ExecutorType;
 import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
 
 import java.util.List;
 
@@ -61,7 +63,13 @@ public class SqlHelper {
 	 * @return SqlSession
 	 */
 	public static SqlSession sqlSessionBatch(Class<?> clazz) {
-		return GlobalConfiguration.currentSessionFactory(clazz).openSession(ExecutorType.BATCH, false);
+        SqlSessionFactory sqlSessionFactory = GlobalConfiguration.currentSessionFactory(clazz);
+        Configuration configuration = sqlSessionFactory.getConfiguration();
+        SqlSession sqlSession = GlobalConfiguration.GlobalConfig(configuration).getSqlsessionBatch();
+        if (sqlSession != null){
+            return sqlSession;
+        }
+        return GlobalConfiguration.currentSessionFactory(clazz).openSession(ExecutorType.BATCH, false);
 	}
 
 	/**
@@ -76,6 +84,12 @@ public class SqlHelper {
 	 * @return SqlSession
 	 */
 	public static SqlSession sqlSession(Class<?> clazz, boolean autoCommit) {
+        SqlSessionFactory sqlSessionFactory = GlobalConfiguration.currentSessionFactory(clazz);
+        Configuration configuration = sqlSessionFactory.getConfiguration();
+        SqlSession sqlSession = GlobalConfiguration.GlobalConfig(configuration).getSqlSession();
+        if (sqlSession != null){
+            return sqlSession;
+        }
 		return GlobalConfiguration.currentSessionFactory(clazz).openSession(autoCommit);
 	}