Mybatis-获取SqlSession相关

注:我们目前学习的是基于不使用spring的情况下mybatis的源码。
流程

首先,我们先看一下我们上次使用的例子:

Public static void main(String[] args) {
String resource = “config/mybatis-config.xml”;
InputStream inputStream;
SqlSession session = null;
try {
inputStream = Resources.getResourceAsStream(resource);
// 构建sqlSession工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取sqlSession
session = sqlSessionFactory.openSession();
// 方法1
String statement = “com.mapper.IStudentMapper.getAll”;
List student = session.selectList(statement);
System.out.println(student);
// 方法2
IStudentMapper sessionMapper = session.getMapper(IStudentMapper.class);
List list = sessionMapper.getAll();
System.out.println(list);

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        session.close();
    }
}

上述代码基本上就是Mybatis的整个流程了,接下来,我们来结合源码来看下,Mybatis是如何初始化,如何获取SqlSession的。

    通过mybatis的Resources来读取全局配置文件,然后以流的形式作为SqlSessionFactoryBuilder的build方法的参数传入;
    SqlSessionFactoryBuilder根据参数创建XMLConfigBuilder对象,然后调用XMLConfigBuilder的parse方法生成Configuration对象;
    然后SqlSessionFactoryBuilder根据Configuration对象作为参数,调用重载的另一个方法build,生成DefaultSqlSessionFactory对象。
    最终,返回DefaultSqlSessionFactory对象。

我们来简单看下代码:
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
try {
// 根据输入流等参数生成XMLConfigBuilder对象,而XMLConfigBuilder用来解析全局配置
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
// 通过parser.parse方法生成Configuration对象,然后再调用重载方法
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.
}
}
}
/**

  • 最后调用该方法生成factory,所以这里我们也可以手动传入Configuration对象来构建SessionFactory
    */
    public SqlSessionFactory build(Configuration config) {
    return new DefaultSqlSessionFactory(config);
    }

上述过程中,涉及到以下几个对象:

XMLConfigBuilder 该对象的目的就是负责解析配置文件的数据,解析成Configuration对象;
Configutation,该对象是全局配置文件mybatis-config.xml所对应的Java对象;
SqlSessionFactoryBuilder,该对象很明显就是为了构建sessionFactory的构造器。

Conguration对象

这里可以注意下,XMLConfigBuilder在这里使用了设计模式中的建造者模式,基本建造者基类是BaseBuilder,XMLConfigBuilder是BaseBuilder类的实现之一,就是具体建造者的角色,所负责的就是解析mybatis-config.xml这个配置文件。
public class XMLConfigBuilder extends BaseBuilder {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值