是什么?

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. 《LeetCode力扣练习》第19题 删除链表的倒数第 N 个结点 Java
  2. stl_vector.h
  3. 【转帖】dopod touch diamond 应用小常识:)
  4. ubuntu c mysql_Ubuntu下MySql和C连接的一些问题
  5. golang http 返回html文件_用Golang写爬虫(三) - 使用goquery
  6. evernote 替代_Evernote的5种开源替代品
  7. 【深度学习】Batch Normalization详解
  8. 转换文档参数_Word、Excel、PDF多格式转换?只需1招全搞定
  9. SQL Server高级查询之常见数据库对象(视图)第五章节
  10. matlab 滤波器_数字滤波器的MATLAB与FPGA实现
  11. 北风网 传智播客 视频地址
  12. exe 反编译 java_.exe文件怎么反编译为java代码(有木有造的)
  13. qq邮箱foxmail imap服务器,开通IMAP服务 用Foxmail远程遥控QQ邮箱
  14. ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
  15. cisco Switching-三层交换配置路由
  16. tinymind 书法文字识别
  17. 解决更换电池引发的乐视2手机(lex620)不进系统问题
  18. 网关状态检测 echo request/reply
  19. 查找一个数等于一组数中某些数相加的和
  20. KVC和KVO简单的区别

热门文章

  1. jquery dom 节点append、before、after、prepend、insertBefore、empty、remove等添加、移除操作汇总
  2. 胡子决定编程语言运势[zt]
  3. iet世界总决赛英雄联盟
  4. sql添加字段并加备注、默认值
  5. Fst详解(具体计算步骤)
  6. 02_如何提升自己的自信和勇气
  7. suid(特殊权限位)提权
  8. LeetCode636. Exclusive Time of Functions
  9. 【计蒜客】泥塑课C++
  10. wordpress主题修改_更改WordPress主题的10个步骤指南