前言
接着environmentElement获取数据源信息后,同级执行代码的mappersElement。
Mybatis源码(三)如何操作数据库
MyBatis源码(二)如何执行sql
Mybatis源码(一)获取数据源
结构小结
分析main函数:
public class MybatisMain {public static void main(String[] args) throws IOException {String resource = "mapper/config/mybatis-config.xml"; //全局配置InputStream is = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession session = sqlSessionFactory.openSession();OrderPojo orderPojo = session.selectOne("com.cbry.mybatis.OrderDao.findSimpleOrderInfo" , 0);System.out.println(orderPojo);}
}
我们将一条简单SQL的执行分为三个部分:
- Mybatis是如何获取数据库源
- Mybatis是如何获取SQL
- Mybatis是如何操作数据库
获取SQL
对应代码
//setEnvironment
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
四种mapper的优先级
同理其它如mapper,这里也可以看来四种mapper的优先级:package > resource > url > calss
后面的源码过长,不截图了。
this.buildStatementFromContext(context.evalNodes("select|insert|update|delete"));
中有解析select标签代码。入参是list:List list
遍历buildStatementFromContext
里面的List ,进行解析,最终存放在一个configuration里面。这里于上文获取数据源是同一个。
context获取mapper
mapper的属性获取: boolean - > 值获取。
往下找,注意到这里是addMappedStatement , 因为是List,要多次加入,最后集成返回XMLStatementBuilder对象
。
这里我们将所获取的属性,集成一个类:也就是源码映射的标签都有一个对应的类与之对应:
由此我们获取到了执行SQL。
后续
获取SQL后如何通过执行器执行sql并返回映射
小结
Mybatis是如何获取SQL