zoukankan      html  css  js  c++  java
  • Mybatis的原理相关

    今天看了一篇有关Mybatis非常好的文章,顺便写了一下学习心得。

    原文地址:https://blog.csdn.net/u010349169/article/details/40422941

    一。Mybatis的框架设计

    Mybatis框架大致可以分为四个部分:

    (1)接口层:用于实现和数据库的交互 ---- 可以通过两种方式来调用:Mapper接口绑定  或   Mapper.xml配置(基于StatementID,即<mapper标签中的>namespace值 + sql标签中的id值)

    (2)数据处理层:Mybatis的核心  主要

                  a.动态SQL的创建  ---  一个语句(一个<select>/<delete>等标签对对应一个Statement对象)

                  b.SQL语句执行

                  c.封装查询结果集为List<E>

    (3)框架支持层:a.事务管理机制  ---  如JDBC原生事务管理的commit(),rollback(),close()   ---  用SqlSession对象执行

            b.数据库连接池管理机制  ---  如<dataSource>标签中的type='POOLED'即为使用数据库连接池   ---  多个数据库连接对象(即Connection对象),已被占用的状态为(active),未被占用的为(idle)

            c.缓存机制  ---  为减小服务器和数据库的压力和提升效率  --- 如SqlSession(一级缓存)SqlSessionFactory(二级缓存)  ----  每一个Statement对象有一个自己对应的缓存

            d.SQL语句的配置  ---  Mapper.xml文件配置  和  注解配置(通过注解传入参数 @param Object obj)

    (4)引导层:引导层是配置和启动Mybatis配置信息的方式。我使用的是mybatis.xml配置方式

    二。Mybatis的一些核心组件

    该图来源于原博客:https://blog.csdn.net/u010349169/article/details/40422941

    博主主页:http://blog.csdn.net/luanlouis/

    Mybatis初始化加载时-->Configuration-->根据Mybatis.xml和Mapper.xml配置文件创建一个或多个MappedStatement对象-->

    将每个对象以key-value的形式存储到Configuration的一个Map中,其中key为(Statement ID)也就是namespace+idvalue为对应的MappedStatement对象

        可通过SqlSession.getConfiguration()获得Configuration对象

    创建SqlSession-->根据Statement ID获得Configuration中对应的MappedStatement对象-->Executor根据SqlSession传递的参数执行query()方法-->创建StatementHandler,并让该对象根据参数执行数据库相关操作,获得返回结果

    Executor的作用:(1)根据传递的参数,通过生成BoundSql对象,完成SQL语句的动态解析以便StatementHandler使用

            (2)为查询创建缓存,以提高性能。(这里应该是每次查询,先看是否有相应缓存,没有缓存再去数据库中执行sql语句查找

            (3)创建JDBC的Statement连接对象,传递给StatementHandler对象,返回List查询结果

    StatementHandler对象主要工作:

            (1)对于JDBC的PreparedStatement对象,会对其占位符进行设置。(通过ParameterHandler对象)

            (2)通过List<E> query(Statement statement, ResultSetHandler resultSetHandler)方法执行Statement并将返回结果resultSet封装成List

  • 相关阅读:
    转 GFlags 使用详解
    printf 格式输出
    XCODE unknown type name __declspec 错误的解决方法
    Boost提示'cl' 不是内部或外部命令,也不是可运行的程序 或批处理文件
    DOLServer
    游戏AI的开发框架组件 behaviac
    mongodb 数据导入和导出
    Makefile经典教程
    g++ 编译动态链接库和静态链接库
    excel 公式
  • 原文地址:https://www.cnblogs.com/xiang9286/p/10451329.html
Copyright © 2011-2022 走看看