Mybatis开发 – SqlSessionFactory

1.

1.Mybatis中SqlSessionFactory使用

SqlSessionFactory是通过SqlSessionFactoryBuilder创建,主要用来创建SqlSession

Mybatis在通过Resources读取配置文件生成InputStream之后,通过SqlSessionFactoryBuilder的build方法来创建SqlSessionFactory,参数是配置文件的输入流对象InputStream

	...
	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config);
	SqlSession session = factory.openSession()
	...

2.SqlSessionFactoryBuilder类初始化

SqlSessionFactoryBuilder主要是来创建SqlSessionFactory的,其类方法如下图,可以接收多种形式的配置文件对象来生成SqlSessionFactory

Mybatis开发 - SqlSessionFactory

SqlSessionFactoryBuilder类方法

SqlSessionFactoryBuilder有一个显示的构造方法,方法中没有具体的逻辑

public class SqlSessionFactoryBuilder {
    public SqlSessionFactoryBuilder() {
    }
	...
}

3.SqlSessionFactoryBuilder创建SqlSessionFactory

主要看下build(InputStream)方法的逻辑

build(InputStream)方法会调用另一个三参数的build方法build(InputStream,String,Properties),其中传入的参数environment和properties为空

public class SqlSessionFactoryBuilder {
    ...
	public SqlSessionFactory build(InputStream inputStream) {
        return this.build((InputStream)inputStream, (String)null, (Properties)null);
    }
	...
}

3.1.XMLConfigBuilder生成Configuration

build(InputStream,String,Properties)方法逻辑:

创建XMLConfigBuilder对象,传入的参数是通过加载Mybatis配置文件得到的InputStream对象、空的String对象、空的Properties对象

调用XMLConfigBuilder的parse方法生成Configuration对象

调用build(Configuration)方法来生成SqlSessionFactory对象

public class SqlSessionFactoryBuilder {
	...
	public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
        SqlSessionFactory var5;
        try {
            XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
            var5 = this.build(parser.parse());
        } catch (Exception var14) {
            throw ExceptionFactory.wrapException("Error building SqlSession.", var14);
        } finally {
            ErrorContext.instance().reset();

            try {
                inputStream.close();
            } catch (IOException var13) {
            }

        }
        return var5;
    }
	...
}

继续查看build(Configuration)方法,该方法中创建一个DefaultSqlSessionFactory对象,调用构造方法时传递XMLConfigBuilder的parse方法得到的Configuration对象

	public SqlSessionFactory build(Configuration config) {
        return new DefaultSqlSessionFactory(config);
    }

4.DefaultSqlSessionFactory对象的创建

DefaultSqlSessionFactory是SqlSessionFactory的默认实现类

有一个Configuration的属性,保存配置文件的信息,在构造方法中对Configuration属性进行赋值

public class DefaultSqlSessionFactory implements SqlSessionFactory {
	private final Configuration configuration;

    public DefaultSqlSessionFactory(Configuration configuration) {
        this.configuration = configuration;
    }
	...
}

SqlSessionFactory是一个接口,定义了一系列创建SqlSession的方法

Mybatis开发 - SqlSessionFactory

5.总结

Mybatis在通过Resources类将配置文件读取到InputStream流对象后,继续创建SqlSessionFactory对象

在使用SqlSessionFactoryBuilder创建SqlSessionFactory时,重点是解析配置文件,该过程通过XMLConfigBuilder类完成,解析后生成对应的Configuration对象,然后创建SqlSessionFactory接口的实现类DefaultSqlSessionFactory实例,并将Configuration对象赋值到DefaultSqlSessionFactory的属性中。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/8239.html

(0)
上一篇 2023年 4月 21日 下午8:51
下一篇 2023年 4月 21日 下午8:51

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信