是什么?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

干什么?

首先明白Mybatis是干什么的,之前使用jdbc操作数据库时候要写很多语句,获取光标,连接,获取具体对象进行相应操作,代码过于繁琐,所以现在有了Mybatis,它将这个操作整合在了一起,你不需要关心具体的和数据库的之间交互,你现在只需要关心你的业务逻辑,书写好你的sql语句,并进行相应的配置就可以了,这样大大提高了开发效率,简化了不必要的代码。ps:说实话我觉得jdbc操作真的繁琐,要注意的太多了,这种方式操作数据库方便多了,毕竟我们重要的是业务逻辑代码。

解决了什么问题?

1.由于JDBC,SQL语句和java代码严重耦合,MyBatis将SQL语句配置在XXX.mapper.xml文件中与java代码分离
2.MyBatis可以自动将java对象映射至SQL语句,也可以自动将SQL执行结果映射至java对象
3.使开发者只关注SQL本身,不再去关注JDBC是如何操作的,Mybatis把有关数据库持久层的一些操作给封装了起来

如何用?

到目前为止我用过mybatis的两种用法:一种是xml形式,一种是注解形式。
1.XML形式:
每一个表所要用到的SQL对应一个xml文件,xml文件对应到一个java的接口,xml中根据mybatis的标签来写不同类型的sql,返回的格式可以用实体、字符串、列表来接收。每一个sql对应到该xml所对应接
口中的一个方法。在进行sql查询时调用方法即可
2.注解形式:
基本原理跟XML类似,这种方式是我在用spring boot进行开发是用到的,一个表对应到一个java接口,每个方法上根据sql不同写不同的注解,具体的注解有哪些,网上有很多的资料,注解内也支持xml的
标签,完成一些注解没办法做到的事情。

原理

mybatis应用程序通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件(也可以用Java文件配置的方式,需要添加@Configuration)来构建SqlSessionFactory(SqlSessionFactory是线程安全的);
然后,SqlSessionFactory的实例直接开启一个SqlSession,再通过SqlSession实例获得Mapper对象并运行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交,之后关闭SqlSession。
说明:SqlSession是单线程对象,因为它是非线程安全的,是持久化操作的独享对象,类似jdbc中的Connection,底层就封装了jdbc连接。

流程


1、加载mybatis全局配置文件(数据源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项。
2、SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory,用来开启SqlSession。
3、SqlSession对象完成和数据库的交互:
a、用户程序调用mybatis接口层api(即Mapper接口中的方法)
b、SqlSession通过调用api的Statement ID找到对应的MappedStatement对象
c、通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象
d、JDBC执行sql。
e、借助MappedStatement中的结果映射关系,将返回结果转化成HashMap、JavaBean等存储结构并返回

带来的新问题

1.Sql语句编写的工作量较大,对开发人员编写SQL语句的功底有一定的要求。
2.SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

MyBatis原理分析相关推荐

  1. MyBatis原理分析(通俗易懂)

    MyBatis原理分析 MyBatis工作流程简述 原生MyBatis原理分析 初始化工作 解析配置文件 配置类方式 执行SQL SqlSession API方式 接口方式 真正掌握一个框架源码分析是 ...

  2. MyBatis原理分析之获取SqlSession

    流程原理分析系列: MyBatis原理分析之获取SqlSessionFactory MyBatis原理分析之获取SqlSession MyBatis原理分析之获取Mapper接口的代理对象 MyBat ...

  3. MyBatis原理分析之四:一次SQL查询的源码分析

    上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: Java代码   String res ...

  4. Mybatis原理分析一 从JDBC到Mybaits

    1.引言 本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybaits这样一个持久层框架.再而论述Mybatis作为一个数据持久层框架本身有待改进之处. 2 ...

  5. Mybatis原理分析之一:从JDBC到Mybatis

    1.引言 本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybaits这样一个持久层框架.再而论述Mybatis作为一个数据持久层框架本身有待改进之处. 2 ...

  6. spring源码学习之整合Mybatis原理分析

    本文主要解析spring是如何与mybatis进行整合,整合的过程中需要哪些组件的支持.以前面提到过的配置例子<spring源码学习之aop事物标签解析> 整合的过程中需要使用以下这个依赖 ...

  7. Mybatis原理分析之二:框架整体设计

    1.引言 本文主要讲解Mybatis的整体程序设计,理清楚框架的主要脉络.后面文章我们再详细讲解各个组件. 2.整体设计 2.1 总体流程 (1)加载配置并初始化       触发条件:加载配置文件 ...

  8. MyBatis原理解析

    参考自: MyBatis原理分析(通俗易懂)_Coder Wang-CSDN博客_mybatis原理 从源码一层一层进行分析,写得清晰易懂.我再这里就不赘述了,就写一下自己的大白话总结吧. Mybat ...

  9. MyBatis版本升级引发的线上告警回顾及原理分析

    本文从一次MyBatis版本升级引发的线上告警开始讲起,然后针对告警定位过程.源码原理进行了深入的分析,并加入了不同版本的类比分析,最后结合实际工作做了一些经验总结,希望能对大家的工程实践有一定的帮助 ...

最新文章

  1. PacBio RS系列已被淘汰,PacBio Sequel成为三代测序最新起跑线。
  2. Analog使用中的一些技巧和总结
  3. 绝对Linux服务器管理利器webmin
  4. C#和NewSQL更配 —— CockroachDB入门
  5. button 和input 的区别及在表单form中的用法
  6. CoCos Creator打包各类问题总结
  7. 38、C++ Primer 4th笔记,特殊工具与技术,嵌套类
  8. ionic cordova 热更新
  9. PCB Layout的10个细节
  10. 奥本大学计算机专业GRE成绩,美国大学GRE分数要求汇总贴,你的目标学校要求多少分?...
  11. e430c参数 thinkpad,联想ThinkPad E430c的详细参数
  12. 基于FBX SDK的FBX模型解析与加载
  13. 生物识别技术是什么,生物识别技术的比较介绍
  14. Unity 云雾shader
  15. 《从零开始的记账本开发》第1篇 需求分析
  16. Block,多态,数组排序
  17. 修改cmd命令行窗口的颜色
  18. 我的一天是这样度过的
  19. 操作系统:最高相应比优先调度算法(HRRN)的实例
  20. 七年级上册英语书人教版单词表第三单元

热门文章

  1. Python实战-让在职教育类网站的视频全自动播放
  2. MYSQL数据库基础篇
  3. RHCSA笔记(1)
  4. 手机通过nat连接虚拟机的mitmproxy
  5. 第8课:彻底实战详解使用IDE开发Spark程序--集群模式运行
  6. 宽字节注入%df的理解
  7. 软件测试 | 测试开发 | Android 10 来袭
  8. 【转】被诅咒的程序员的七宗罪
  9. vbs 语音说话(表白必备)
  10. Mysql实现幂等_过幂等性问题