소스 검색

重写SqlSessionFactoryBuilder的build方法.

聂秋秋 6 년 전
부모
커밋
b755fcbc67

+ 57 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisSqlSessionFactoryBuilder.java

@@ -0,0 +1,57 @@
+package com.baomidou.mybatisplus.core;
+
+import org.apache.ibatis.exceptions.ExceptionFactory;
+import org.apache.ibatis.executor.ErrorContext;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.session.SqlSessionFactoryBuilder;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Properties;
+
+/**
+ * 重写SqlSessionFactoryBuilder
+ *
+ * @author nieqiurong 2019/2/23.
+ */
+public class MybatisSqlSessionFactoryBuilder extends SqlSessionFactoryBuilder {
+    
+    @Override
+    @SuppressWarnings("Duplicates")
+    public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
+        try {
+            //todo 这里替换成自己的了
+            MybatisXMLConfigBuilder parser = new MybatisXMLConfigBuilder(reader, environment, properties);
+            return build(parser.parse());
+        } catch (Exception e) {
+            throw ExceptionFactory.wrapException("Error building SqlSession.", e);
+        } finally {
+            ErrorContext.instance().reset();
+            try {
+                reader.close();
+            } catch (IOException e) {
+                // Intentionally ignore. Prefer previous error.
+            }
+        }
+    }
+    
+    @SuppressWarnings("Duplicates")
+    @Override
+    public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
+        try {
+            //todo 这里替换成自己的了
+            MybatisXMLConfigBuilder parser = new MybatisXMLConfigBuilder(inputStream, environment, properties);
+            return build(parser.parse());
+        } catch (Exception e) {
+            throw ExceptionFactory.wrapException("Error building SqlSession.", e);
+        } finally {
+            ErrorContext.instance().reset();
+            try {
+                inputStream.close();
+            } catch (IOException e) {
+                // Intentionally ignore. Prefer previous error.
+            }
+        }
+    }
+}

+ 33 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/MybatisConfigurationTest.java

@@ -0,0 +1,33 @@
+package com.baomidou.mybatisplus.core;
+
+import org.apache.ibatis.io.Resources;
+import org.apache.ibatis.session.Configuration;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+import java.io.Reader;
+
+/**
+ * @author nieqiurong 2019/2/23.
+ */
+class MybatisConfigurationTest {
+    
+    @Test
+    void testXml() throws IOException {
+        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
+        SqlSessionFactory factory = new MybatisSqlSessionFactoryBuilder().build(reader);
+        Configuration configuration = factory.getConfiguration();
+        boolean mapUnderscoreToCamelCase = configuration.isMapUnderscoreToCamelCase();
+        Assertions.assertTrue(mapUnderscoreToCamelCase);
+        Assertions.assertEquals(configuration.getDefaultScriptingLanguageInstance().getClass(),MybatisXMLLanguageDriver.class);
+    }
+    
+    @Test
+    void testBean() {
+        MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
+        Assertions.assertTrue(mybatisConfiguration.isMapUnderscoreToCamelCase());
+        Assertions.assertEquals(mybatisConfiguration.getDefaultScriptingLanguageInstance().getClass(),MybatisXMLLanguageDriver.class);
+    }
+}

+ 7 - 0
mybatis-plus-core/src/test/resources/mybatis-config.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+
+</configuration>

+ 2 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/spring/MybatisSqlSessionFactoryBean.java

@@ -17,6 +17,7 @@ package com.baomidou.mybatisplus.extension.spring;
 
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBuilder;
 import com.baomidou.mybatisplus.core.MybatisXMLConfigBuilder;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
 import com.baomidou.mybatisplus.core.enums.IEnum;
@@ -91,7 +92,7 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
 
     private Properties configurationProperties;
 
-    private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
+    private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new MybatisSqlSessionFactoryBuilder();
 
     private SqlSessionFactory sqlSessionFactory;