千家信息网

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

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"Java持久层框架Mybatis的详细介绍"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所
千家信息网最后更新 2026年11月02日Java持久层框架Mybatis的详细介绍

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

一.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 mapperProxyFactory = (MapperProxyFactory)this.knownMappers.get(type);

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的详细介绍"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

缓存 查询 事务 数据 处理 数据库 结果 代理 管理 事务管理 插件 机制 原理 对象 接口 方法 时候 过程 配置 框架 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 互联网与科技 互联网络科技 广东猪兼强互联网科技有限公司 今日互联网科技 科技类互联网 互联网科技创新企业排名 广州优美互联网科技 创业天下互联网科技有限公司 贵州叶脉互联网科技有限公司所属行业 昭通互联网科技选哪家 宜昌元轩互联网科技有限公司 健康食品互联网创新科技园项目 中国科技创新与世界互联网大会 伊宁互联网科技做什么的 昆明中奇联合互联网科技 全球科技与互联网公司市值变化 互联网科技机房 互联网科技职业技能培训学校 黑龙江互联网科技公司 互联网科技战争 互联网公司 科技公司 成都狮子座互联网科技 互联网科技创新企业排名 科技与互联网的利与弊 佛山市翊博互联网络科技有限公司 恒生互联网科技业指数调整周期 每天都有哪些好的互联网科技 互联网企业科技类企业如何做账 上海乐五互联网科技有限公司
0