MyBatis原理分析
是什么?
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原理分析相关推荐
- MyBatis原理分析(通俗易懂)
MyBatis原理分析 MyBatis工作流程简述 原生MyBatis原理分析 初始化工作 解析配置文件 配置类方式 执行SQL SqlSession API方式 接口方式 真正掌握一个框架源码分析是 ...
- MyBatis原理分析之获取SqlSession
流程原理分析系列: MyBatis原理分析之获取SqlSessionFactory MyBatis原理分析之获取SqlSession MyBatis原理分析之获取Mapper接口的代理对象 MyBat ...
- MyBatis原理分析之四:一次SQL查询的源码分析
上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: Java代码 String res ...
- Mybatis原理分析一 从JDBC到Mybaits
1.引言 本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybaits这样一个持久层框架.再而论述Mybatis作为一个数据持久层框架本身有待改进之处. 2 ...
- Mybatis原理分析之一:从JDBC到Mybatis
1.引言 本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybaits这样一个持久层框架.再而论述Mybatis作为一个数据持久层框架本身有待改进之处. 2 ...
- spring源码学习之整合Mybatis原理分析
本文主要解析spring是如何与mybatis进行整合,整合的过程中需要哪些组件的支持.以前面提到过的配置例子<spring源码学习之aop事物标签解析> 整合的过程中需要使用以下这个依赖 ...
- Mybatis原理分析之二:框架整体设计
1.引言 本文主要讲解Mybatis的整体程序设计,理清楚框架的主要脉络.后面文章我们再详细讲解各个组件. 2.整体设计 2.1 总体流程 (1)加载配置并初始化 触发条件:加载配置文件 ...
- MyBatis原理解析
参考自: MyBatis原理分析(通俗易懂)_Coder Wang-CSDN博客_mybatis原理 从源码一层一层进行分析,写得清晰易懂.我再这里就不赘述了,就写一下自己的大白话总结吧. Mybat ...
- MyBatis版本升级引发的线上告警回顾及原理分析
本文从一次MyBatis版本升级引发的线上告警开始讲起,然后针对告警定位过程.源码原理进行了深入的分析,并加入了不同版本的类比分析,最后结合实际工作做了一些经验总结,希望能对大家的工程实践有一定的帮助 ...
最新文章
- PacBio RS系列已被淘汰,PacBio Sequel成为三代测序最新起跑线。
- Analog使用中的一些技巧和总结
- 绝对Linux服务器管理利器webmin
- C#和NewSQL更配 —— CockroachDB入门
- button 和input 的区别及在表单form中的用法
- CoCos Creator打包各类问题总结
- 38、C++ Primer 4th笔记,特殊工具与技术,嵌套类
- ionic cordova 热更新
- PCB Layout的10个细节
- 奥本大学计算机专业GRE成绩,美国大学GRE分数要求汇总贴,你的目标学校要求多少分?...
- e430c参数 thinkpad,联想ThinkPad E430c的详细参数
- 基于FBX SDK的FBX模型解析与加载
- 生物识别技术是什么,生物识别技术的比较介绍
- Unity 云雾shader
- 《从零开始的记账本开发》第1篇 需求分析
- Block,多态,数组排序
- 修改cmd命令行窗口的颜色
- 我的一天是这样度过的
- 操作系统:最高相应比优先调度算法(HRRN)的实例
- 七年级上册英语书人教版单词表第三单元