zoukankan      html  css  js  c++  java
  • mybatis

    简介

    MyBatis是一个轻量级的ORM框架,它简化了对关系数据库的使用,开发人员可以在XML或注解中编写SQL来完成对数据库的操作。 如果完全使用XML方式,SQL语句可以集中维护,做到与Java代码完全隔离,便于对SQL调优。

    原理及流程

    加载配置:配置来源于两个地方,一是配置文件,一是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。
    SQL解析:当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参。
    SQL执行:将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果。
    结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本数据类型,并将最终结果返回。

    技术盏

    反射、jdk动态代理、Ognl表达式引擎、缓存

    反射和动态代理

    解析是将SQL或存储过程定义表述为Mybatis中对应对象的过程,例如将执行的Sql标签( , …)解析为 MappedStatement ;输入参数定义标签解析为 ParameterMap ;结果列定义标签解析为 ResultMap

    Mybatis支持将一个类的方法映射到一个 mapper 文件里的对应 statement sql,将方法名与DML SQL标签的id对应起来,这样我们就可以透明地使用 interface 的方式结合了面向对象的方式来与数据库操作,这样做更趋近于面向对象的编程风格。其中用到jdbc动态代理原理,用 MapperProxy 动态代理了需要执行的接口方法,主要代理逻辑在 MapperMethod 中实现,负责用接口的名称以及方法名称找到解析好的 MappedStatement 然后调用 SqlSession 中对应的执行逻辑执行。

    缓存

    Mybatis的一级缓存是SqlSession级别。第一次执行select时候会发现sqlsession缓存没有记录,会去数据库查找,然后把结果保存到缓存,第二次同等条件查询下,就会从缓存中查找到结果。另外为了避免脏读,每次执行更新新增删除时候会清空当前sqlsession缓存。

    二级缓存是namespace级别的。同一个namespace下的搜寻语句共享一个二级缓存。如果开启了二级缓存,则先从二级缓存中查找,查找不到则委托为SimpleExecutor查找,而它则会先从一级缓存中查找,查找不到则从数据库查找。

    mybaits的二级缓存一般不怎么使用,默认一级缓存是开启的。

    https://www.cnblogs.com/luoxn28/p/6417892.html(源码分析)

    https://www.cnblogs.com/hlhdidi/p/6255953.html(例子)

  • 相关阅读:
    Android自定义控件 -Canvas绘制折线图(实现动态报表效果)
    Android事件分发机制详解(2)----分析ViewGruop的事件分发
    Android事件分发机制详解(1)----探究View的事件分发
    Java单例模式(转载)
    排序算法练习--JAVA(:内部排序:插入、选择、冒泡、快速排序)
    javaIO-学习笔记
    java多线程基础
    java二分查找举例讨论
    tomcat安装部署完整过程
    mariadb安装部署完整过程
  • 原文地址:https://www.cnblogs.com/yang-lq/p/10176599.html
Copyright © 2011-2022 走看看