mybaits源码分析(一) 核心执行流程

本文深入分析了MyBatis的核心执行过程,包括配置加载、创建mapper代理和SqlSession执行。配置加载涉及SqlSessionFactoryBuilder和XMLConfigBuilder解析配置;创建mapper代理主要由MapperRegistry和MapperProxyFactory完成;SqlSession执行主要由DefaultSqlSession、Executor、MappedStatement等组件协同工作,实现了参数处理、SQL执行和结果处理。
摘要由CSDN通过智能技术生成

本文主要介绍mybaits的核心执行过程的源码分析,我们按照xml配置的方式,建立一个查询的demo,测试代码如下

@Test
	public void test2() throws Exception {
		InputStream in = Resources.getResourceAsStream("custom/sqlMapConfig2.xml");
		SqlSessionFactory factory2 =  new SqlSessionFactoryBuilder().build(in);
		SqlSession openSession = factory2.openSession();
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		User user = mapper.findUserById(1);
		// User user = openSession.selectOne("com.wj.source_two.demo.mapper.UserMapper.findUserById", 1);
		System.out.println(user);
		openSession.close();
	}

    按照上面的代码执行过程,我们把执行过程分为下面几个部分分析: 配置加载,创建mapper代理,SqlSession执行

一、配置加载

1、相关的类
            SqlSessionFactoryBuilder : 负责创建SqlSessionFactory对象,并且传入了从配置文件解析的Configuration。
            XMLConfigBuilder: 核心解析类及其父类BaseBuilder的子类,负责解析xml各种配置到Configuration对象。
            XPathParser:xpath解析
            XNode:node的包装

2、流程分析
  1) SqlSessionFactoryBuilder调用XMLConfigBuilder解析输入流解析到Configuration 

 public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
                try {
                  XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
                  return build(parser.parse());

 2) parse方法是对sqlMapConfig.xml的解析,XPathParser和XNode用法后期补充。

public Configuration parse() {
                    parseConfiguration(parser.evalNode("/configuration"));
                    return configuration;
              }
              private void parseConfiguration(XNode root) {
                try {
                  propertiesElement(root.evalNode("properties")); //issue #117 read properties first
                  typeAliasesElement(root.evalNode("typeAliases"));
                  pluginElement(root.evalNode("plugins"));
                  objectFactoryElement(root.evalNode("objectFactory"));
                  objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
                  settingsElement(root.evalNode("settings"));
 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值