hj_mybatis
官方文档: 中文文档
w3c文档: w3c教程
主要组件:XML配置,XML映射文件,动态SQL,Java API,SQL语句构建器,日志;
Mybatis优缺点:
- sql语句与代码分离,可存放于xml配置文件中,便于维护管理,但不便于调试;也可使用注解的形式直接在代码中写sql(不推荐);
- 用逻辑标签控制动态sql拼接,优点是标签代替编写逻辑代码,缺点是复杂sql拼接较复杂;
- 结果集于java对象自动映射,配置好映射关系即可自动映射,不配置映射关系,通过配置列名=字段也可自动映射,但sql依赖较强;
- 编写原生sql,接近jdbc较灵活,但对sql语句依赖程度高,半自动,数据库移植(如MySQL->Oracle)较麻烦,部分sql语句需要重新调整.
源码实现,mybatis主要核心部件:
- SqlSession : 与数据库交互的会话,完成增删改查功能,是mybatis工作的主要顶层API;
- Executor : 执行器,是mybatis调度的核心,负责sql语句的生成和查询缓存的维护等职责;
- StatementHandler : 封装了JDBC Statement操作,负责对JDBC Statement的操作,如设置参数,将statement结果集转换成List集合;
- ParameterHandler : 将client传递的参数转换成JDBC Statement所需要的参数;
- ResultSetHandler : 将JDBC返回的ResultSet结果集对象转换成List类型的集合;
- TypeHandler : 负责Java数据类型和jdbc数据类型之间的映射和转换;
- MappedStatement : 维护了一条sql< select | update | delete | insert >节点的封装;
- SqlSource : 负责根据client传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中并返回;
- BoundSql : 表示动态生成的sql语句以及相应的参数信息等数据;
- Configuration : mybatis的配置信息都维护在configuration对象之中;
用到的主要设计模式:
- Builder模式: SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;
- 工厂模式 : SqlSessionFactory、ObjectFactory、MapperProxyFactory;
- 单例模式 : ErrorContext和LogFactory;
- 代理模式 : MapperProxy、ConnectionLogger,用的jdk的动态代理;executor.loader包使用了cglib或者javassist达到延迟加载的效果;
- 组合模式 : SqlNode和各个子类ChooseSqlNode等;
- 模板方法模式 : BaseExecutor、SimpleExecutor,BaseTypeHandler及其子类如IntegerTypeHandler;
- 适配器模式 : Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;
- 装饰者模式 : Cache包中的cache.decorators子包中等各个装饰者的实现;
- 迭代器模式 : PropertyTokenizer;
补充说明:源码原理解析,可debug源码进行~~~