理解Mybatis的执行流程

写本篇的目的

本篇可以解决新手在学习Mybatis时疑惑的几个问题

比如:1.为什么要一个Dao的接口类就要对应编写一个mapper映射xml文件

2.为什么通过配置mybatis-config.xml文件和Dao层接口方法的编写,及对应的xml映射文件的编写,然后通过调用Mybatis提供的接口就能实现方法的调用?

注:因为本人知识量尚浅,有些内容解释不一定全面,本篇只供新手小白理解Mybatis的执行流程,但本人认为讲解的清晰的已经远超CSDN的百分之90博主,因为他们大部分都是互相盗取文章,复制粘贴,文章教学方式逻辑并不连贯,本文以自己学习的思路分享给大家

学习方式

基于使用Mybaits执行sql语句的流程去分析底层原理

//1.读取配置文件
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
//2.获取sqlSession工厂
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(in);
//3.通过sqlSession工厂获取sqlSession对象
SqlSession sqlSession = sessionFactory.openSession();
//4.使用sqlSession创建Dao接口的代理对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user : users) {
    System.out.println(user);
}
//6.关闭资源
sqlSession.close();
in.close();

1.读取配置文件

2.获取SessionFactory工厂

如何解析文件流?

配置类的属性

工厂的如何设计

SqlSessionFacory的具体实现

3.获取Session对象

sqlSession的具体实现

4.创建Dao接口的代理对象

Executor

Executor类的主要作用:负责执行sql语句,并且封装结果集

5.使用代理对象执行方法

总结

我们来总结一下Mybatis大致是如何实现最终接口代理对象方法的执行

首先我们要将我们配置的mybatis-config.xml文件通过类加载器的getResoureceAsStream()方法加载到内存中,然后工厂构建者通过构建工厂build()方法的内部通过Dom4j技术来解析文件流,并返回一个Configuration对象,这个Configuration的属性有数据库连接四要素和Map对象,Map内部封装着以mapper映射文件中的namespace+.+id为key,以Mapper对象为value,Mapper对象的属性有sql语句和返回值。然后根据这个配置文件,来创建SqlSessionFactory,然后通过SqlSessionFactory获取Session对象,再通过Session对象获取代理对象,代理对象的方法执行是靠通过JDK动态代理增强Executor对象的selectList方法,selecList方法就是通过调用原生的JDBC接口来实现的

注:最底层执行sql的类就是Executor,操作底层就是通过原始的JDBC,故需要配置类通过构造传参的方法,一步步传递到SqlSession类中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值