简述本文主要介绍MyBatis框架工作原理及流程 。
MyBatis介绍MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射 。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作 。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO(PlainOldJavaObjects,普通老式Java对象)为数据库中的记录 。
MyBatis架构图
图1 MyBatis架构图
核心类SqlSessionFactoryBuilder:这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了 。因此SqlSessionFactoryBuilder实例的最佳作用域是方法作用域(也就是局部方法变量) 。你可以重用SqlSessionFactoryBuilder来创建多个 SqlSessionFactory实例,但最好还是不要一直保留着它,以保证所有的 XML 解析资源可以被释放给更重要的事情 。
【mybatis调用存储过程详解 mybatis存储过程写法】SqlSessionFactory:SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例 。使用SqlSessionFactory的最佳实践是在应用运行期间不要重复创建多次,多次重建SqlSessionFactory被视为一种代码”坏习惯” 。因此SqlSessionFactory的最佳作用域是应用作用域 。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式 。
SqlSession:每个线程都应该有它自己的SqlSession实例 。SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域 。绝对不能将SqlSession实例的引用放在一个类的静态域,甚至一个类的实例变量也不行 。也绝不能将SqlSession实例的引用放在任何类型的托管作用域中,如Servlet框架中的HttpSession 。如果你现在正在使用一种Web框架,考虑将SqlSession放在一个和HTTP请求相似的作用域中 。换句话说,每次收到HTTP请求,就可以打开一个SqlSession,返回一个响应后,就关闭它 。这个关闭操作很重要,为了确保每次都能执行关闭操作,你应该把这个关闭操作放到finally块中 。
Executor:Executor(执行器)接口有两个实现类,其中BaseExecutor有三个继承类分别是BatchExecutor(重用语句并执行批量更新),ReuseExecutor(重用预处理语句prepared statement,跟Simple的唯一区别就是内部缓存statement),SimpleExecutor(默认,每次都会创建新的statement) 。
Mapped Statement:用来存放我们SQL映射文件中的信息包括sql语句,输入参数,输出参数等等 。一个SQL节点对应一个MappedStatement对象 。
工作流程首先解释下两个文件
mybatis-config.xml:全局配置文件,引入了数据源、事务等mybatis运行环境;
Mapper.xml:配置映射文件,配置sql结果集封装类型、传参类型;
1、 解析配置文件(MyBatis-config.xml、Mapper.xml),MyBatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项 。;
2、 SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 。
3、 SqlSessionFactory创建会话SqlSession;
4、 执行器将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象,使用Paramterhandler填充参数,使用statementHandler绑定参数 。
5、 JDBC执行sql,借助MappedStatement中的结果映射关系,使用ResultSetHandler将返回结果转化成HashMap、JavaBean等存储结构并返回 。
6、 关闭sqlsession会话 。
ok,以上就是MyBatis工作原理及流程详细讲解,看完记得转发、点赞和收藏 。想了解更多内容,请关注本小编,如果有错误,欢迎批评指正,感谢支持 。
推荐阅读
- 苹果手机内存不够用怎么办 苹果存储空间深度清理方法
- ajax调用后端接口实例 ajax调用接口步骤
- oss对象存储服务 腾讯云oss收费标准
- 永久免费云储存空间 阿里云存储收费标准
- 龙之谷2手机需要多大的存储空间 龙之谷2手机存储空间介绍
- Dropbox怎么查看可用存储空间 Dropbox可用存储空间查询流程一览
- 使命召唤战区多大空间 cod战区所需存储空间介绍
- 千秋辞平民玩家资源怎么存 千秋辞平民玩家资源存储方法
- 冰汽时代采煤机怎么用 冰汽时代采煤机达到存储上限应对方法
- 动物森友会我的设计存储上限是多少 动森我的设计存储上限