当前位置: 首页 > news >正文

什么是mybatis?

[学习笔记]

什么是mybatis:

Mybatis本质是一种半自动化的ORM框架,前身是ibatis,除了要pojo和映射关系之外,还需要些sql语句。

怎么看待ORM框架:

处理矛盾的,java程序员喜欢面向对象开发和面向接口开发,而数据库是一张张表和一个个库组成的,这两者的关系很难调和,而关系型映射解决了这一个问题。

Mybatis映射文件三要素:

SQL;

映射规则;

Pojo;

为什么要用mybatis而不用hibernate?

在我们互联网的环境里面, 我们经常要面对海量数据,所以我们要基于底层的调优能力,就是sql语句。而hibernate生成的sql语句很不透明。

Mybatis核心流程三大阶段:

初始化阶段,读取XML配置文件和注解中的配置信息,创建解析对象,并完成各个模块的初始化工作。就是把我们的配置文件加载到内存里面去。在sqlSession初始化的时候加载到内存中去的。

代理阶段,封装iBatis的编程模型,使用mapper接口开发的初始化工作;

数据读写阶段,通过SqlSession完成SQL的解析,参数的映射,SQL的执行,结果的反射解析过程。

SqlSession

SqlSession意味着创建数据库会话,代表了一次与数据库的连接;

是mybatis对外提供数据访问的主要API;

实际上SqlSession的功能都是基于Excutor来实现的。

Mybatis的两种编程模型Mybatis封装了ibatis编程模型,使用sqlsession对外提供数据库的访问。还有一种是使用mapper接口编程,就可以访问数据库

Mybatis和ibatis的区别

Mybatis前身是ibatis的,ibatis之前是Apache旗下的产品,后来到了谷歌旗下,但是谷歌发现ibatis实现起来很麻烦,还需要维护静态变量,并且没有业务含义。所以谷歌改成了mybatis,通过面向接口的方式,让所有代码有了业务含义,屏蔽掉了底层代码的复杂性。

为什么使用mapper接口就可以对数据库进行访问了呢?

其实最后它还是转成了底层的ibatis执行方法,它会使用配置文件解读+动态代理, 找到session中的对应方法执行,找到方法的命名空间和方法名。传递参数。

业务流程还是首先要实例化sqlssessionFactory,加载数据库配置文件以及mapper.xml到configuration对象。然后获取sqlsession对象。然后通过动态代理跨越面向接口编程和ibatis编程的鸿沟,最后遵循jdbc的规范,通过底层的四大对象合作完成功能。

 


版权声明:本文为转载文章。原文地址:https://blog.csdn.net/qq_41665481/article/details/85990904

转载于:https://www.cnblogs.com/haima1949/p/10761685.html

相关文章:

  • nodejs 更新最新版本
  • Git版本控制
  • 1025 选菜
  • 极简.高性能.分布式框架,可运行于多种环境(apache/php-fpm,swoole)
  • bootstrap 使用table表单布局 隐藏显示行
  • 一键部署Openstack R版
  • redis3.2 最新版本启动配置文件redis.conf详细说明
  • Slack将新增更多功能免写程序就能自动排工作流程
  • Java 集合框架之 Map
  • 《编程珠玑》读书笔记(2,3)
  • 读书:全职高手
  • 思科模拟器-DHCP配置
  • 在Linux上限制远程登陆的IP
  • Docker 服务编排 Mesos Swarm Kubernetes 三种模式实践
  • log4j2输出到kafka
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【css3】浏览器内核及其兼容性
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Angular 响应式表单之下拉框
  • Hibernate【inverse和cascade属性】知识要点
  • java8 Stream Pipelines 浅析
  • js如何打印object对象
  • miaov-React 最佳入门
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Node + FFmpeg 实现Canvas动画导出视频
  • QQ浏览器x5内核的兼容性问题
  • vagrant 添加本地 box 安装 laravel homestead
  • 不上全站https的网站你们就等着被恶心死吧
  • 初探 Vue 生命周期和钩子函数
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 离散点最小(凸)包围边界查找
  • 利用jquery编写加法运算验证码
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 如何胜任知名企业的商业数据分析师?
  • 我的业余项目总结
  • 小程序01:wepy框架整合iview webapp UI
  • 用Python写一份独特的元宵节祝福
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 进程与线程(三)——进程/线程间通信
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​TypeScript都不会用,也敢说会前端?
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #{} 和 ${}区别
  • #HarmonyOS:基础语法
  • #include
  • #图像处理
  • $NOIp2018$劝退记
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (12)目标检测_SSD基于pytorch搭建代码
  • (31)对象的克隆
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366