简历
本文主要介绍MyBatis框架的工作原理和流程。
MyBatis简介
MyBatis是一个优秀的持久层框架,支持定制SQL、存储过程和高级映射。MyBatis消除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注释将原语类型、接口和Java POJOs(普通旧Java对象)配置和映射到数据库中的记录中。
MyBatis架构图
图1 MyBatis架构图
核心类
SqlSessionFactorybuilder:这个类可以实例化、使用和丢弃。一旦创建了sqlsessionfactory,就不再需要它了。因此,SqlSessionFactoryBuilder实例的最佳作用域是方法作用域(即局部方法变量)。可以重用SqlSessionFactoryBuilder来创建SqlSessionFactory的多个实例,但最好不要一直保留它,以确保所有的XML解析资源都可以释放到更重要的事情上。
SQLSSESSIONFactory:一旦创建,SQLSSESSIONFactory应该在应用程序运行期间一直存在。没有理由丢弃它或重新创建另一个实例。使用SqlSessionFactory的最佳做法是不要在应用程序运行期间重复创建它。多次重建SqlSessionFactory算是一种代码”坏习惯”。因此,SqlSessionFactory的最佳范围是应用程序范围。有很多方法可以做到这一点。最简单的一种是使用单例模式或静态单例模式。
SqlSession:每个线程都应该有自己的SQL会话实例。SqlSession的实例不是线程安全的,因此不能共享,因此它的最佳作用域是请求或方法作用域。永远不能将SqlSession实例的引用放在类的静态域中,即使是类的实例变量。您永远不能将SqlSession实例的引用放在任何类型的托管范围内,例如Servlet框架中的HttpSession。如果现在使用的是Web框架,可以考虑将SqlSession放在类似HTTP request的作用域中。换句话说,每次收到HTTP请求时,可以打开一个SqlSession,在返回响应后,可以关闭它。这个封闭操作非常重要。为了确保每次都能执行关闭操作,应该将这个关闭操作放在finally块中。
executor:executor接口有两个实现类,其中BaseExecutor有三个继承类:BatchExecutor(重用语句并执行批量更新)、ReuseExecutor(重用准备好的语句,与Simple的唯一区别是内部缓存语句)、SimpleExecutor(默认情况下每次都会创建一个新的语句)
映射语句:用来存储我们的sql映射文件的信息包括SQL语句、输入参数、输出参数等等。一个SQL节点对应一个MappedStatement对象。
工作流程
首先解释下两个文件。
Mybatis-config.xml:全局配置文件,介绍了数据源、事务等Mybatis运行环境;
Mapper.xml:配置映射文件,配置sql结果集的封装类型和参数传递类型;
1.解析配置文件(MyBatis-config.xml,Mapper.xml),MyBatis基于xml配置文件生成配置,MappedStatement(包括参数映射配置,动态SQL语句和结果映射配置),对应<>
2.SqlSessionFactoryBuilder创建会话工厂。
3.SqlSession工厂创建一个会话SqlSession
4.执行器解析MappedStatement对象,转换sql参数,动态拼接sql生成jdbc Statement对象。Paramterhandler用于填充参数,statementHandler用于绑定参数。
5.JDBC执行sql。借助MappedStatement中的结果映射关系,使用ResultSetHandler将返回的结果转换成HashMap、JavaBean等存储结构并返回。
6.关闭sqlsession会话。
好了,以上就是对MyBatis工作原理和流程的详细说明。看完记得转发,点赞,收藏。更多信息请关注这个小编。如有错误,请批评指正。谢谢你的支持。
本文来自西绿柿投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/639519.html