本篇内容介绍了“Java持久层框架Mybatis的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联公司成立于2013年,先为上思等服务建站,上思等地企业,进行企业商务咨询服务。为上思企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
一.Mybaits的架构设计
二.Mybatis-Spring的执行流程
1.初始化SqlSessionFactoryBean
SqlSessionFactoryBean 实现了 Spring 的 FactoryBean和InitializingBean接口,Spring 将会在应用启动时为你 创建 SqlSessionFactory 对象
从类路径下加载在mappers包和它的子包中所有的 MyBatis 映射器 XML 文件。
2.获取MapperProxy进行代理执行Mapper接口.
代理Mapper接口(重中之重,Mybatis的动态代理MapperPoxy)
1.mapperRegistry.getMapper(type, sqlSession);
2.MapperProxyFactory
3.mapperProxyFactory.newInstance(sqlSession);
4.代理执行查询
3.调用SqlsessionApi进行数据库操作
4.SqlSessionTemplate初始化sqlSessionProxy代理类进行open会话
5.openSession
6.openSession再执行:DefaultSqlSession调用selectList
7.先从缓存中查询:这里先查询二级缓存,再查session的缓存
CachingExecutor缓存执行器先查询缓存,再用delegate执行SIMPLEExecutor进行数据库查询。
8.缓存没有则查询数据库:queryFromDatabase
9.添加插件到RoutingStatementHandler
1.newStatementHandler
2.SatementHandler statementHandler = new RoutingStatementHandler()
3.this.interceptorChain.pluginAll(statementHandler);
10.最后真正的调用JDBC-->PreparedStatement.execute()进行数据库操作
11.查询结果处理:resultSetHandler:-->DefaultResultSetHandler
12.最后sqlSession.commit(true),并关闭Sqlsession
三.Mybatis核心原理需要着重debug
sql解析过程
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默认对二级缓存是关闭的。需要自己配置,然后初始化的时候会拿到缓存开启的配置
cacheElement(context.evalNode("cache"));
“Java持久层框架Mybatis的详细介绍”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!