源码地址:https://github.com/mybatis/mybatis-3/
仓库地址:https://gitcode.net/qq_42665745/mybatis/-/tree/04-datasource-use
数据源的解析、创建和使用
流程:
1.Resources加载MyBatis配置文件生成Reader字符流
2.SqlSessionFactoryBuilder开始引导构建SqlSessionFactory,包括两步:
-
: 第一步XMLConfigBuilder中使用dom4j解析xml配置文件
- 将解析的数据源环境信息封装成Environment对象存入Configuration中
- 将解析的SQL包装成MappedStatement对象存入Configuration中
- 然后因为xml的namespace和对应的Dao接口路径相同,使用namespace初始化Dao接口的映射器工厂,也存入Configuration中
-
:第二步,使用Configuration初始化SqlSessionFactory
3.使用SqlSessionFactory的openSession创建一个SqlSession,参数传入Configuration
4.sqlSession.getMapper(IUserDao.class);实际是从Configuration中拿到其映射器工厂,然后使用映射器工厂创建IUserDao的代理对象
5.userDao.queryUserInfoById(“u10001”);当执行方法时,实际执行的是代理类的invoke方法,在这里会根据xml的sql类型执行SqlSession中的方法
6.从Configuration中拿信息,MappedStatement中拿到参数替换成“?”的sql,从Environment拿到数据源和事务工厂,然后按照JDBC的流程,从数据源中获取数据库连接,然后执行sql,拿到结果再做对象转换
测试的时候Mybatis配置文件中的url要加useSSL,也就是:jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&useUnicode=true
否则可能执行失败