温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java持久层框架Mybatis的详细介绍

发布时间:2021-09-09 11:40:33 来源:亿速云 阅读:167 作者:chen 栏目:大数据

本篇内容介绍了“Java持久层框架Mybatis的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一.Mybaits的架构设计

Java持久层框架Mybatis的详细介绍

二.Mybatis-Spring的执行流程

1.初始化SqlSessionFactoryBean

Java持久层框架Mybatis的详细介绍

      SqlSessionFactoryBean 实现了 Spring 的 FactoryBean和InitializingBean接口,Spring 将会在应用启动时为你 创建 SqlSessionFactory 对象

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="mapperLocations" value="classpath*:/mappers/**/*.xml" /></bean>
从类路径下加载在mappers包和它的子包中所有的 MyBatis 映射器 XML 文件。

2.获取MapperProxy进行代理执行Mapper接口.

Java持久层框架Mybatis的详细介绍

代理Mapper接口(重中之重,Mybatis的动态代理MapperPoxy)

    1.mapperRegistry.getMapper(type, sqlSession);

    2.MapperProxyFactory<T> mapperProxyFactory =                     (MapperProxyFactory)this.knownMappers.get(type);

    3.mapperProxyFactory.newInstance(sqlSession);

    4.代理执行查询

3.调用SqlsessionApi进行数据库操作

Java持久层框架Mybatis的详细介绍

4.SqlSessionTemplate初始化sqlSessionProxy代理类进行open会话

Java持久层框架Mybatis的详细介绍

 5.openSession

Java持久层框架Mybatis的详细介绍    6.openSession再执行:DefaultSqlSession调用selectList

Java持久层框架Mybatis的详细介绍

7.先从缓存中查询:这里先查询二级缓存,再查session的缓存

          CachingExecutor缓存执行器先查询缓存,再用delegate执行SIMPLEExecutor进行数据库查询。

8.缓存没有则查询数据库:queryFromDatabase

Java持久层框架Mybatis的详细介绍

9.添加插件到RoutingStatementHandler

    1.newStatementHandler

    2.SatementHandler statementHandler = new RoutingStatementHandler()

    3.this.interceptorChain.pluginAll(statementHandler); 

10.最后真正的调用JDBC-->PreparedStatement.execute()进行数据库操作

11.查询结果处理:resultSetHandler:-->DefaultResultSetHandler

Java持久层框架Mybatis的详细介绍

12.最后sqlSession.commit(true),并关闭Sqlsession

三.Mybatis核心原理需要着重debug

sql解析过程

Java持久层框架Mybatis的详细介绍

       Mybaitis的sql解析工作通过XMLMapperBuilder进行初始化的,在Mybaiti初始化Config的时候处理所有的Mapper文件,最终得到SqlSource,会放到Configuration中,有了SqlSource,就能拿BoundSql了,BoundSql可以得到最终的sql。解析的过程比较繁琐,大家可以debug一下。

推荐一篇博文,Mybatis-Sql动态解析原理:

http://www.cnblogs.com/fangjian0423/p/mybaits-dynamic-sql-analysis.html

MyBatis的事务管理

        一、使用JDBC的事务管理机制:即利用java.sql.Connection对象完成对事务的提交(commit())、回滚(rollback())、关闭(close())等。

        二、使用MANAGED的事务管理机制:这种机制MyBatis自身不会去实现事务管理,而是让程序的容器如(JBOSS,Weblogic)来实现对事务的管理

事务这一块还没有仔细的debug,给大家推荐博文看一下:

https://blog.csdn.net/luanlouis/article/details/37992171

插件运行机制

默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:

    1.拦截执行器的方法:Executor

    2.拦截参数的处理:ParameterHandler

    3.拦截结果集的处理:ResultSetHandler

    4.拦截Sql语法构建的处理:StatementHandler

       Mybatis通过反射实例化plugin节点中的interceptor属性表示的类。然后调用全局配置类Configuration的addInterceptor方法。插件源码需要单独解析,大家自己也可以跟一遍。

Mybatis的缓存

        一级缓存:对于会话(Session)级别的数据缓存。是为了短时间的一样的查询带来的资源浪费,MyBatis会在SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候,如果判断先前有个完全一样的查询,会直接从缓存中直接将结果取出,返回给用户,不需要再进行一次数据库查询了。一级缓存默认是开启的。

        二级缓存:Mybatis默认对二级缓存是关闭的。需要自己配置,然后初始化的时候会拿到缓存开启的配置<cache />,进行处理这样的元素节点。后面再详细总结缓存的实现原理,虽然二级缓存用的不多。

 cacheElement(context.evalNode("cache"));

“Java持久层框架Mybatis的详细介绍”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI