Mybatis底层理解

Mybatis底层思路打通

首先了解下重要类
XMLConfigBuilder mybatis内置配置文件类,该类继承了BaseBuilder类
在这里插入图片描述

BaseBuilder 类中有Configuration字段用于存储配置信息

Environment 存放于Configuration中,用于存放DataSource实例
MappedStatement 从Configuration中获取,与配置文件Mapper中的节点对应(通过接口名+方法名做key对应的)
在这里插入图片描述

SqlSessionFactory 用于创建sqlSession
RowBounds mybatis中用于分页的类
在这里插入图片描述

大致流程代码
可根据代码中的类点进去看底层代码,了解执行过程

        //使用mybatis自带的文件流解析功能,解析配置文件
        InputStream inputStream = Resources.getResourceAsStream("");
        /**
         * 通过mybatis配置获取sqlSession制造工厂
         * build方法中会出线XMLConfigBuilder配置文件类,该类继承了BaseBuilder类,
         * BaseBuilder类中有Configuration字段用于存储配置信息,
         * 其中MyBatis创建的DataSource实例后,会将其放到Configuration对象内的Environment对象中
         * new DefaultSqlSessionFactory(Configuration)得到SqlSessionFactory,该类继承了SqlSessionFactory
         * SqlSessionFactory中有openSession方法得到SqlSession类
         */
        SqlSessionFactory sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder().build(inputStream);
        //SqlSession中有对应的crud方法
        SqlSession sqlSession = sqlSessionFactoryBuilder.openSession();
        /**
         * SqlSession api中涉及一个重要类MappedStatement,他是从Configuration中获取的,
         * MappedStatement与Mapper配置文件中的一个select/update/insert/delete节点相对应。mapper中配置的标签都被封装到了此对象中,主要用途是描述一条SQL语句
         *
         * 可以传入RowBounds类进行分页
         * 其中executor.query这个方法中会查询缓存中是否有需要的数据,如果没有的话就通过queryFromDatabase方法中的doQuery方法从数据库查找
         */
        RowBounds rowBounds = new RowBounds();
        sqlSession.selectList("",rowBounds);
        //这里不再调用SqlSession 的api,而是获得了接口对象,调用接口中的方法。
//        Mapper mapper = sqlSession.getMapper(Class.forName("类地址"));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值