关键词:简单、原始、看不到
现在基本没有人直接使用了。大多使用框架。我在生产级的使用,还是刚工作的时候,在前端使用了类似的东东。
对应模块:
接口层
SqlSession:应用程序与Mybatis的交互接口
核心处理层
配置解析:对Mybatis配置文件、映射文件,dao接口注解等进行配置解析,生成Configuration对象
SQL解析:MyBatis 实现动态SQL 语句的功能,并提供了诸如where等SQL语句节点
参数映射:根据实参,解析动态SQLL节点,生成可执行SQL语句,处理占位符,绑定实参
SQL执行:负责缓存,事务,JDBC等的调度。详见执行过程图
结果集映射:通过ResultSetHandler等,完成结果集的映射,得到结果对象并返回
插件:提供插件接口,便于用户扩展,甚至修改Mybatis默认行为
基础支持层
数据源模块:通过配置生成(可委托第三方数据源框架),包含目标数据库信息,向上支持连接生成等
事务管理模块:对数据库事务进行抽象,并提供简单实现。可与Spring集成,由Spring实现事务管理
缓存模块:为Mybatis的一二级缓存提供支持,从而优化数据库性能
Binding模块:实现DAO接口文件与对应映射文件的关联
反射模块:对Java原生反射进行了封装与优化
类型转换:一方面实现JavaType与JDBCType的转换,另一方面支撑Mybatis的别名机制
日志模块:提供详细日志输出信息,并能够集成第三方日志框架(log4j,sel4j等)
资源加载:封装Java原生类加载器,提供类与其他资源文件的有序加载能力
解析器模块:一方面封装XPath,提供xml配置文件解析能力,另一方面为动态Sql占位符的处理,提供支持
数据源模块补充:即常用组件-DataSource。MyBatis 自身提供了相应的数据源实现(Pooled,UnPooled,Jndi),MyBatis 也提供第三方数据源集成的接口()。现在开源的数据源都提供了比较丰富的功能,如连接池功能、检测连接状态等
@Select注解,就可以省略对应的映射文件节点
DAO接口的实现类,是由Mybatis自动创建的动态代理对象(依赖于对应的映射文件节点)
Mybatis初始化阶段:加载Mybatis配置文件、映射文件,dao接口注解->保存到configuration对象中->创建SqlSessionFactory对象。Mybatis初始化阶段后,开发者可以通过SqlSessionFactory,获取对应的SqlSession。wdk-som的数据库配置就是直接配置生成DataSource与SqlSessionFactory。
a.解析模块Mybatis的配置,有三种途径:
XML:如Mybatis-config.xml
注解:如DAO接口方法上的@Select
注入:如MybatisConfiguration类
其中,XML是Mybatis配置的主要方式。XML配置则涉及XML文件解析。
XML常见解析方式,有一下三种:
DOM:前端小伙伴,不要太熟悉。DOM 是基于树形结构的XML 解析方式,它会将整个XML 文档读入内存并构建一个DOM树,基于这棵树形结构对各个节点( Node )进行操作。DOM 解析方式的优点是易于编程,可以根据需求在树形结构的各节点之间导航。DOM 解析方式的缺点是在XML文件较大时,会造成较大的资源占用(因为需要构建DOM树)。