Mybatis的工作原理和执行流程
Mybatis的工作原理和执行流程
什么是Mybatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
一、Mybatis工作原理
我们知道,JDBC有四个核心对象
- DriverManager,用于注册数据库连接
- Connection,与数据库连接对象
- Statement/PrepareStatement,操作数据库SQL语句的对象
- ResultSet,结果集或一张虚拟表
而MyBatis也有四大核心对象:
- SqlSession对象,该对象中包含了执行SQL语句的所有方法;类似于JDBC里面的Connection SqlSession下的四大对象 Executor:执行器,由它统一调度其他三个对象来执行对应的SQL; StatementHandler:使用数据库的Statement执行操作; ParameterHandler:用于SQL对参数的处理; ResultHandler:进行最后数据集的封装返回处理;
- Executor接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。类似于JDBC里面的Statement/PrepareStatement。
- MappedStatement对象,该对象是对映射SQL的封装,用于存储要映射的SQL语句的id、参数等信息。
- ResultHandler对象,用于对返回的结果进行处理,最终得到自己想要的数据格式或类型。可以自定义返回类型。
二、Mybatis执行流程
如上图:
1.读取Mybatis配置文件,通过Resources获取一个inputStream字节流对象
String resource="SqlMapperConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource);
2.通过SqlSessionFactoryBuilder建造者创建一个sessionFactory工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
3.sessionFactory可以生成一个SqlSession对象
SqlSession session = sessionFactory.openSession();
4.session可以执行sql方法
