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