hj_mybatis

官方文档: 中文文档

w3c文档:  w3c教程

主要组件:XML配置,XML映射文件,动态SQL,Java API,SQL语句构建器,日志;

Mybatis优缺点:

  1. sql语句与代码分离,可存放于xml配置文件中,便于维护管理,但不便于调试;也可使用注解的形式直接在代码中写sql(不推荐);
  2. 用逻辑标签控制动态sql拼接,优点是标签代替编写逻辑代码,缺点是复杂sql拼接较复杂;
  3. 结果集于java对象自动映射,配置好映射关系即可自动映射,不配置映射关系,通过配置列名=字段也可自动映射,但sql依赖较强;
  4. 编写原生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源码进行~~~

原文地址:https://www.cnblogs.com/hua-jian/p/13495861.html