• 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源码进行~~~

  • 相关阅读:
    atoi (String to Integer) leetcode
    按层逆遍历一棵树,使用满二叉树存储
    unix网络编程-配置unp.h头文件
    ListView系列(七)——Adapter内的onItemClick监听器四个arg参数
    Windows系统下安装VirtualBox,系统找不到指定路径的做法
    Android Fragment完全解析,关于碎片你所需知道的一切
    【Android开源框架列表】
    fragment报错
    2013 年开源中国 10 大热门 Java 开源项目
    【移动开发】Android中三种超实用的滑屏方式汇总(ViewPager、ViewFlipper、ViewFlow)
  • 原文地址:https://www.cnblogs.com/hua-jian/p/13495861.html
Copyright © 2020-2023  润新知