MyBatis(7)——运行原理

一、框架架构

二、运行原理

首先分析测试用例:

@Test
public void testInterface() throws IOException {
	String resource = "mybatis-config.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	SqlSession session = sqlSessionFactory.openSession();
	try {
		EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
		Employee employee = mapper.selectEmployee(121);
		System.out.println(employee);
	} finally {
		session.close();
	}
}

1、先初始化SqlSessionFactory对象:

MyBatis(8)——运行原理-初始化SqlSessionFactory

2、使用sqlSessionFactory对象获取SqlSession对象:

MyBatis(9)——运行原理-获取SqlSession对象

3、使用SqlSession的getMapper方法获取接口的代理对象:

MyBatis(10)——运行原理-getMapper获取接口的代理对象

4、最后调用mapper的查询方法:

MyBatis(11)——运行原理-查询流程原理

三、原理总结

1、MyBatis的主要成员

  • Configuration        MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中
  • SqlSession            作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能
  • Executor                MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
  • StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数等
  • ParameterHandler  负责对用户传递的参数转换成JDBC Statement 所对应的数据类型
  • ResultSetHandler   负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
  • TypeHandler          负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换
  • MappedStatement  MappedStatement维护一条<select|update|delete|insert>节点的封装
  • SqlSource              负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
  • BoundSql              表示动态生成的SQL语句以及相应的参数信息

2、总结:

1、根据配置文件(全局,sql映射)初始化出Configuration对象
2、创建一个DefaultSqlSession对象,
      里面包含Configuration以及
      Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor)
3、DefaultSqlSession.getMapper():拿到Mapper接口对应的MapperProxy;
4、MapperProxy里面有(DefaultSqlSession);
5、执行增删改查方法:
    1)、调用DefaultSqlSession的增删改查(Executor);
    2)、会创建一个StatementHandler对象。
        (同时也会创建出ParameterHandler和ResultSetHandler)
    3)、调用StatementHandler预编译参数以及设置参数值;使用ParameterHandler来给sql设置参数
    4)、调用StatementHandler的增删改查方法;
    5)、ResultSetHandler封装结果
注意:四大对象(executor,statementHandler ,parameterHandler和resultHandler)每个创建的时候都有一个interceptorChain.pluginAll(parameterHandler);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值